Tech Tips
By George Frasier, October 01, 2002
Font creation and rounding differences
Philip Hamer
How to relocate GetOpenFileName dialogs
Stephen Schumacher
Querying Multiple IDispatch method identifiers
Matthew Wilson
Partial array expansion in the Microsoft Visual Studio Debugger
Gigi Sayfan
October 2002/Tech Tips
Listing 3: Making multiple method DISPID queries
SYFNCOMDECL Dispatch_GetMethodIDs( LPUNKNOWN punk,
REFIID riid,
LPCOLESTR rgszNames[],
UINT cNames,
LCID lcid,
DISPID rgdispid[])
{
HRESULT hr;
UINT i;
if( punk == NULL ||
rgszNames == NULL ||
rgdispid == NULL)
{
hr = E_POINTER;
}
else if(cNames < 1)
{
hr = E_INVALIDARG;
}
else
{
LPDISPATCH pdisp;
hr = punk->QueryInterface(IID_IDispatch, (void**)&pdisp);
if(SUCCEEDED(hr))
{
BOOL bUnknownDispid = false;
for(hr = S_FALSE, i = 0; i < cNames; ++i)
{
hr = pdisp->GetIDsOfNames( riid,
(LPOLESTR*)rgszNames + i,
1,
lcid,
rgdispid + i);
if(SUCCEEDED(hr))
{
continue;
}
else if(hr == DISP_E_UNKNOWNNAME)
{
rgdispid[i] = DISPID_UNKNOWN;
bUnknownDispid = true;
}
else
{
break;
}
}
if(bUnknownDispid)
{
hr = DISP_E_UNKNOWNNAME;
}
pdisp->Release();
}
}
return hr;
}