c# - 从 C++ 使用 COM Interop 对象

标签 c# c++ .net com interop

我有一个为 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 Interop 对象?

最佳答案

CComObject<Foo::Bar>* obj;
HRESULT hr = CComObject<Foo::Bar>::CreateInstance(&obj);
//check hr

或者如果您想使用 Bar 实现的名为 IBar 的接口(interface):

CComPtr<Foo::IBar> pIObj;
HRESULT hr = pIObj.CreateInstance(__uuidof(Foo::Bar));
//check hr

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

关于c# - 从 C++ 使用 COM Interop 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17954267/

相关文章:

c# - 编辑网页值并通过单击按钮提交?

.net - 在模板中填充数据的最佳实践?

c# - 如何打破每个项目,但不是完整的根?

c++ - LLVM 是典型的虚拟机吗?

c++ - 混合使用 constexpr 和 const?

c++ - 使用 cmake 交叉编译 libwebsockets

c# - 如何验证类属性?

c# - 如何获取本地网络计算机列表?

c# - 为什么这会评估为 False?

.net - 使用 DrawImage 方法黑屏