如何获取接口属于ANSI C中的IID,IConnectionPoint,IConnectionPointContainer

时间:2014-06-24 13:00:24

标签: c com

我在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。实现这一点对我来说是下一步。

2 个答案:

答案 0 :(得分:0)

  

如何找出哪些接口属于IID?

你不能从你持有的界面指针告诉IID。在代码中,您通常管理特定于某些接口的变量中的指针,并使用相应的IID获取其中的值。

您可以使用感兴趣的QueryInterface进行另一次IID来电。请注意,除非IIDIID_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