使用C ++中的COM Interop对象

时间:2013-07-30 18:08:00

标签: c# c++ .net com interop

我有一个为COM Interop注册的.NET库,我成功地使用了VB6代码(因此,它已正确注册,这不是问题)

我正在尝试通过C ++代码(MFC ActiveX控件)使用同一个库,我甚至无法实例化对象(是的,它有一个无参数构造函数)< / em>的

想象一下,命名空间是 Foo ,类的名称是 Bar 。我如何实例化这样的对象?我正在尝试这个:

在.h文件中:

Foo::Bar *obj;

在.cpp文件中,在ActiveX控件的构造函数上:

obj = new Foo::Bar();

我收到以下错误:

  • «不允许使用不完整的类型“»;
  • «错误C2027:使用未定义类型'Foo :: Bar'»。

基本上我的问题是:如何使用C ++代码中的.NET COM Interop对象?

2 个答案:

答案 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();