我是一名 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/