c++ - COM 调度接口(interface)事件

标签 c++ com

我是一名 COM 初学者,正在尝试通过 COM 在我的 C++ 项目中使用托管库。我能够为双接口(interface)创建实例并调用方法......它工作正常......

我想知道如何构造可以从任何调度接口(interface) COM 对象接收事件的客户端接口(interface)?

#include "stdafx.h"
#import "../COMLib/bin/Debug/COMLib.tlb" named_guids
#include <comutil.h>

int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);

COMLib::ICalcPtr pCalc;

HRESULT hRes = pCalc.CreateInstance(__uuidof(COMLib::Calc));
if(FAILED(hRes))
    printf("ICalcPtr::CreateInstance failed w/err 0x%08lx\n", hRes);
else
{
    printf("%d\n", pCalc->Factorial(10));
}

CoUninitialize();
return 0;
}

我知道如何像上面那样为双接口(interface)创建实例。但是我需要帮助来为事件实例化调度接口(interface)。非常感谢您的帮助。

最佳答案

一旦有了 Com 实例,就可以继续 queryinterface对于您需要使用的任何其他接口(interface)。假设它实现了 IDispatch,您将有一个指向该接口(interface)的指针。

COMLib::ICalcPtr pCalc;

HRESULT hRes = pCalc.CreateInstance(__uuidof(COMLib::Calc));
if(FAILED(hRes))
    printf("ICalcPtr::CreateInstance failed w/err 0x%08lx\n", hRes);
else
{
    IDispatchPtr pDisp;
    hRes = pCalc->QueryInterface(IID_IDispatch, &pDisp);
    ASSERT(SUCCEEDED(hRes));

    printf("%d\n", pCalc->Factorial(10));

}

如果您希望从此对象中接收 COM 事件,您可能真的需要 IConnectionPoint接口(interface)集。 This article有很好的解释和示例,说明如何在 C++ 中从 COM 对象附加和接收连接点事件。

关于c++ - COM 调度接口(interface)事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23649049/

相关文章:

c++ - MinGW 可以毫不费力地复制大多数 unix 系统调用吗?

c++ - 虚拟继承 - 跳过构造函数

c++ - 何时相对于模板实例化评估 static_assert

c++ - 跨线程同步C++错误日志文件

c++ - 为什么需要查询接口(interface)?

azure - 是否可以在azure webjob部署期间注册一些COM组件?

c++ - 错误 : expected primary-expression before 'char'

delphi - 将接口(interface)传递给不同的进程

.net - 为什么在 VBScript 中使用 `For Each` 迭代 Hashtable 不起作用?

c# - 生成的.TLB文件输出目录