我正在破译一个使用COM的巨大项目,我完全不熟悉它。这很混乱,我无法弄清楚一切如何相互作用。我所看到的只是InvokeHelper(...),我希望看到大量的代码。什么是InvokeHelper()?它有什么作用? 谢谢你的帮助。
答案 0 :(得分:6)
即使这是迟到的回答,我也想在这里发布,因为我花了几天的时间来弄清楚它是如何工作的。它可能对其他人感兴趣。
以下是如何从InvokeHelper()调用获取实际代码的路径:
当然,如果您没有带有CLSID的COM类的源代码,则无法查看该方法,但至少可以找到其名称,如下所示:
DISPID dispidCommand = 0x1; /// This is the dispid, you're looking for
COleDispatchDriver driver;
BOOL bRes = driver.CreateDispatch(GetClsid());
ASSERT(bRes);
HRESULT hr;
CComPtr<ITypeInfo> pti;
hr = driver.m_lpDispatch->GetTypeInfo(0, GetUserDefaultLCID(), &pti);
ASSERT(SUCCEEDED(hr));
UINT nCount = 0;
CComBSTR bstrName; // Name of the method, which is called via DISPID
hr = pti->GetNames(dispidCommand, &bstrName, 1, &nCount);
ASSERT(SUCCEEDED(hr));
我希望它有助于某人。 小心。