我是一名COM初学者,并尝试通过COM在我的c ++项目中使用托管库。我可以为双接口和调用方法创建实例......它工作正常......
我想知道如何构造可以从任何dispinterface COM对象接收事件的客户端接口?
#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;
}
我知道如何为双界面创建实例,如上所述。但我需要帮助来实例化事件的dispinterface。非常感谢您的帮助。
答案 0 :(得分:1)
一旦有了Com实例,请继续queryinterface以获取您需要使用的任何其他接口。假设它实现了IDispatch,你将拥有一个指向该接口的指针。
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接口集。 This article有很好的解释和示例,说明如何在C ++中从COM对象附加和接收连接点事件。