我有一个为COM Interop注册的.NET库,我成功地使用了VB6代码(因此,它已正确注册,这不是问题)。
我正在尝试通过C ++代码(MFC ActiveX控件)使用同一个库,我甚至无法实例化对象(是的,它有一个无参数构造函数)< / em>的
想象一下,命名空间是 Foo ,类的名称是 Bar 。我如何实例化这样的对象?我正在尝试这个:
在.h文件中:
Foo::Bar *obj;
在.cpp文件中,在ActiveX控件的构造函数上:
obj = new Foo::Bar();
我收到以下错误:
基本上我的问题是:如何使用C ++代码中的.NET COM Interop对象?
答案 0 :(得分:2)
CComObject<Foo::Bar>* obj;
HRESULT hr = CComObject<Foo::Bar>::CreateInstance(&obj);
//check hr
或许如果你想使用IBar
实现的名为Bar
的接口:
CComPtr<Foo::IBar> pIObj;
HRESULT hr = pIObj.CreateInstance(__uuidof(Foo::Bar));
//check hr
正如汉斯在评论中所说,你将要使用#import指令导入类型库。
答案 1 :(得分:1)
在C ++中,首先应该初始化COM,然后通过UUID获取COM对象,你可以使用这个COM对象的功能,完成后,取消初始化COM。所以代码将是这样的:
CoInitialize(NULL);
IMyClassPtr myClass = IMyClassPtr(_uuid(myClass));
if (myClass != NULL)
{
myClass->DoSomething();
}
CoUnitialize();