我在IConnectionPoint&amp ;;的帮助下在客户端和COM对象之间创建了一个连接。的IConnectionPointContainer。
data->pApp->lpVtbl->QueryInterface(data->pApp, &IID_IUnknown, (void**)&data->pUnknown));
data->pUnknown->lpVtbl->QueryInterface(data->pUnknown, &IID_IConnectionPointContainer, (void**)&data->pConnectionPointContainer));
data->pConnectionPointContainer->lpVtbl->FindConnectionPoint(data->pConnectionPointContainer, &DIID__IApplicationEvents, &data->pConnectionPoint));
data->pConnectionPoint->lpVtbl->Advise(data->pConnectionPoint, (IUnknown*)sink, &sink->dwCookie));
我已经实现了QueryInterface,AddRef&发布。 如果COM对象将执行QueryInterface,则打印riid。
IID: 0x3 - 0x0 - 0x0 - 0x764D3E14
This-Objekt: 0030EC4C, ppvObject: 0030E2D4
IID: 0x3 - 0x0 - 0x0 - 0x764D3E14
This-Objekt: 0030EC4C, ppvObject: 0030E294
...
如何找出哪些接口属于IID?
编辑:
我希望使用建议的IsEqualGUID
将IID与我所知道的内容进行比较
但我不知道我的目标应用程序调用了哪些接口。
if(IsEqualGUID(iid, &IID_IThisIsWhatIAmLookingFor))
我试图找出我得到的数字属于哪个接口,所以我尝试根据我得到的数字找到接口IID_IThisIsWhatIAmLookingFor
。实现这一点对我来说是下一步。
答案 0 :(得分:0)
如何找出哪些接口属于IID?
你不能从你持有的界面指针告诉IID
。在代码中,您通常管理特定于某些接口的变量中的指针,并使用相应的IID
获取其中的值。
您可以使用感兴趣的QueryInterface
进行另一次IID
来电。请注意,除非IID
为IID_IUnknown
,否则您不能假设每次都获得相同的指针。
答案 1 :(得分:0)
如果幸运的话,该界面与Automation兼容且存在Typelib。在这种情况下,注册表包含一个条目HKEY_CLASSES_ROOT\Interface\{00000000-0000-0000-0000-000000000000}\TypeLib
,指向HRCR\Typelib
下面的条目,该条目引用了您可以导入的.tlb文件。
另一种方法是以各种典型形式将IID输入Google:
00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-0000-00000000