我正在破译一个使用 COM 的大型项目,我对它完全陌生。这很令人困惑,我无法弄清楚一切是如何相互作用的。我所看到的只是 InvokeHelper(...) ,我希望在其中看到大量代码。什么是 InvokeHelper()?它有什么作用?
感谢您的任何帮助。
最佳答案
即使这是一个迟到的答案,我还是想把它贴在这里,因为我花了几天的时间来弄清楚它是如何工作的。对其他人来说可能很有趣。
下面是如何从 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));
我希望它可以帮助某人。
小心。
关于c++ - Visual C++ : InvokeHelper() function,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5944755/