Как найти имя функции, которая будет вызываться? - PullRequest
2 голосов
/ 21 января 2010

Я получил:

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 голосов
/ 21 января 2010

Вот простой пример того, как получить имя

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));
}
0 голосов
/ 21 января 2010

Я бы попытался получить интерфейс ITypeInfo для объекта (CWnd::GetControlUnknown, IUnknown::QueryInterface). Затем вы можете использовать функцию ITypeInfo::GetNames с вашим идентификатором участника (0x18), чтобы получить название метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...