c# - 向 C# 公开 ISO C++ 类

标签 c# c++ mono c++-cli pinvoke

我需要向 C# 公开一些 C++ 类(我在 Linux 上构建,使用单声道,所以 COM 不是一个选项)

到目前为止,我收集的证据表明,解决此问题的最佳方法是:

  1. 围绕 ISO C++ 类编写一个包装 C++.Net 类
  2. 使用 C# 中的 C++.Net 类

我有以下问题:

  • 首先,这是实现将 ISO C++ 类暴露给 C# 目标的“最佳”方式吗?
  • 不过,到目前为止,我还没有看到任何实际展示如何执行此操作的示例 - 任何人都可以建议一些链接或代码片段来说明如何为虚拟类完成此操作?
  • 如何将异步消息通知从 C++ 代码发送到 C# 代码?理想情况下,我想让 C# 类以接收到的数据作为参数引发事件

最佳答案

您不能使用 Mono 在 Linux 上编写 C++/.NET 类。 Mono 不支持托管 C++ 或 C++/CLI,因此无法“围绕 ISO C++ 类编写包装 C++.Net 类”。

你最好的选择是为你的 C++ 类生成一个 C API,可以通过 Platform Invoke 访问。 .

话虽如此,缓解这种情况的一种选择是使用 SWIG为您生成包装器。它支持从 C++ 类生成 C# 包装器(以及其他语言的包装器),并且在 Linux/Mono 上运行良好。


编辑:

有关官方“Mono 不支持混合模式 C++/CLI”,请参阅 Languages page :

It's important to note that any language that compiles to pure IL should work under Mono. Some languages such as Microsoft's Managed C++ do not always compile to pure IL, so they will not always work as expected, since they are not truly platform independent.

用于 native 互操作的 C++/CLI 需要非纯 IL,因此它不适用于 Mono。

关于c# - 向 C# 公开 ISO C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2595770/

相关文章:

c# - 在不规则多边形中寻找点的算法

c# - 如何确定是否正在使用 Microsoft.VisualStudio.Web.CodeGeneration.Design?

c++ - 访问 C++ 类成员对象,但不允许覆盖它

c++ - 从 riscv-gnu-toolchain 生成的 s 文件不运行 RISCV 模拟器

c++ - 如何在 Linux 中从动态库(libsample.so)生成导入库(libsample.a)

.net - 为什么 winform 面板只在鼠标悬停或鼠标单击时更新?

c# - 如何使用 C# 4.0 编译器让 MonoDevelop 以 .NET 2.0 框架为目标?

javascript - 摆脱不相关的控制台错误(404(未找到))

web-services - MonoTouch 支持访问 Mono.Security.Protocol.Ntlm.NtlmFlags

c# - DropDownList.Items.FindByValue() 上的 NullReferenceException