如何找到将要调用的函数名?

时间:2010-01-21 05:29:01

标签: visual-c++

我得到了:

InvokeHelper(0x18, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);

如果我们有对象方法或属性,如何获取函数名称 由dwDispID = 0x18指定?

void AFX_CDECL InvokeHelper(
   DISPID dwDispID,
   WORD wFlags,
   VARTYPE vtRet,
   void* pvRet,
   const BYTE* pbParamInfo,
   ... 
);

2 个答案:

答案 0 :(得分:0)

我会尝试在对象(ITypeInfoCWnd::GetControlUnknown)上获得IUnknown::QueryInterface接口。然后,您可以使用ITypeInfo::GetNames函数和您的成员ID(0x18)来获取方法的名称。

答案 1 :(得分:0)

以下是如何获取名称的简单示例

void CTestDlg::OnTypeinfo()
{
    HRESULT hr = S_OK;

    COleDispatchDriver sc;

    sc.CreateDispatch("Omtool.ServConnect.1"); // change for your type

    CComPtr<ITypeInfo> pti;

    hr = sc.m_lpDispatch->GetTypeInfo(0, GetUserDefaultLCID(), &pti);
    ASSERT(SUCCEEDED(hr));

    CComBSTR bstrName;
    UINT nCount = 0;

    hr = pti->GetNames(0x2, &bstrName, 1, &nCount); // change 0x2 for your ID
    ASSERT(SUCCEEDED(hr));
}