1

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

发生的事情是我试图通过 C++ 代码(一个 MFC ActiveX 控件)使用同一个库,我什至无法实例化该对象(是的,它有一个无参数的构造函数)

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

在 .h 文件上:

Foo::Bar *obj;

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

obj = new Foo::Bar();

我收到以下错误:

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

所以基本上我的问题是:如何从 C++ 代码中使用 .NET COM 互操作对象?

4

2 回答 2

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

正如 Hans 在他的评论中所建议的那样,您将要使用 #import 指令来导入类型库。

于 2013-07-30T19:26:14.507 回答
1

在C++中,首先要初始化COM,然后通过UUID获取COM对象,就可以使用这个COM对象的功能了,完成后,取消初始化COM。所以代码将是这样的:

CoInitialize(NULL);

IMyClassPtr myClass = IMyClassPtr(_uuid(myClass));
if (myClass != NULL)
   {
     myClass->DoSomething();
 }

 CoUnitialize();
于 2013-07-31T14:44:20.650 回答