c - 如何获取接口(interface)属于 ANSI C 中的 IID、IConnectionPoint、IConnectionPointContainer

标签 c com

在 IConnectionPoint 和 IConnectionPointContainer 的帮助下,我在客户端和 COM 对象之间创建了一个连接。

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 和 Release。 如果 COM 对象将执行 QueryInterface,我将打印 riid。

IID: 0x3 - 0x0 - 0x0 - 0x764D3E14
This-Objekt: 0030EC4C, ppvObject: 0030E2D4

IID: 0x3 - 0x0 - 0x0 - 0x764D3E14
This-Objekt: 0030EC4C, ppvObject: 0030E294

...

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


编辑:

我很乐意使用建议的 IsEqualGUID 将 IID 与我知道的东西进行比较 但我不知道我的目标应用程序调用了哪些接口(interface)。

if(IsEqualGUID(iid, &IID_IThisIsWhatIAmLookingFor))

我试图找出我得到的数字属于哪个接口(interface),所以我尝试根据我得到的数字找到接口(interface) IID_IThisIsWhatIAmLookingFor。实现这是我的下一步。

最佳答案

How can I find out which Interfaces belong to the IID's?

你不能从你持有的接口(interface)指针中分辨出IID。在代码中,您通常管理特定于特定接口(interface)的变量中的指针,并使用相应的 IID 获取那里的值。

然而,您可以使用感兴趣的 IID 调用另一个 QueryInterface。请注意,您不能假设每次都获得相同的指针,除非 IIDIID_IUnknown

关于c - 如何获取接口(interface)属于 ANSI C 中的 IID、IConnectionPoint、IConnectionPointContainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24387320/

相关文章:

c - 告诉最后一次在 C 中访问文件的时间

C++ 库中的 C# 枚举

c# - 解析一个 COM [out] VARIANT* containing parray as SAFEARRAY of BSTR's in c#.net

c - 具有灵活数组成员的结构体的 “Array”

c - 在 C 预编译器中的实现之间切换

c - 箭头运算符放置 C

java - Java 中指针的替代方案

com - 为什么我无法注册我的 COM DLL?

com - ISequentialStream 的 RemoteRead 和 RemoteWrite 成员是什么?

c# - 如何将结构或类从 .NET COM dll 返回到使用的 VB6 应用程序?