C# 中的非托管 C++ 类

Posted

技术标签:

【中文标题】C# 中的非托管 C++ 类【英文标题】:Unmanaged C++ class in C# 【发布时间】:2010-12-06 13:53:20 【问题描述】:

我能否从 C# 代码实例化和“使用”非托管 C++ 类(例如,使用 DllImport 等)?

【问题讨论】:

【参考方案1】:

在 Windows 上,您可以使用 COM interop 来使用 C++。但是,这不适用于 Linux/Mac OS X。

另一种选择是在 C++ 类周围公开一个 C 包装器(C++ 中的外部“C”)。这是必要的,因为 DllImport 需要一个 C ABI。

编辑:第三种选择是C++/CLI,即为 .Net 编译 C++ 代码。这也是一个仅限 Windows 的解决方案。

【讨论】:

【参考方案2】:

您也可以使用 SWIG。它适用于 Linux 和 Mac 上的 Mono。

它生成一组暴露 C++ 类的 C 函数,并生成一个用 DllImport 调用它们的 C# 类。

它允许在 C# 中继承 C++ 类,并且使用 Director 功能 C++ 代码可以回调 C# 中覆盖的虚拟方法。

【讨论】:

以上是关于C# 中的非托管 C++ 类的主要内容,如果未能解决你的问题,请参考以下文章

编写用于 C# 的非托管 C++ DLL

从传递回完整对象模型的非托管 C++ 调用 C# 方法

如何添加对由 C# 项目调用的非托管 C++ 项目的引用?

c# - 如何调用分配输出缓冲区以在c#中返回数据的非托管c++函数?

调用使用 C# 返回结构数组的非托管 dll 函数

从 C# 如何调用需要 *VARIANT 参数的非托管 OLE 接口?