【发布时间】:2010-12-06 13:53:20
【问题描述】:
我能否从 C# 代码实例化和“使用”非托管 C++ 类(例如,使用 DllImport 等)?
【问题讨论】:
我能否从 C# 代码实例化和“使用”非托管 C++ 类(例如,使用 DllImport 等)?
【问题讨论】:
在 Windows 上,您可以使用 COM interop 来使用 C++。但是,这不适用于 Linux/Mac OS X。
另一种选择是在 C++ 类周围公开一个 C 包装器(C++ 中的外部“C”)。这是必要的,因为 DllImport 需要一个 C ABI。
编辑:第三种选择是C++/CLI,即为 .Net 编译 C++ 代码。这也是一个仅限 Windows 的解决方案。
【讨论】:
您也可以使用 SWIG。它适用于 Linux 和 Mac 上的 Mono。
它生成一组暴露 C++ 类的 C 函数,并生成一个用 DllImport 调用它们的 C# 类。
它允许在 C# 中继承 C++ 类,并且使用 Director 功能 C++ 代码可以回调 C# 中覆盖的虚拟方法。
【讨论】: