在Linux中使用Mono.NET库

soh*_*hum 3 .net c++ linux macos mono

首先,我想指出我没有使用Mono.NET的经验,所以如果问题很愚蠢,请耐心等待.

我正在开发一个用本机C++代码编写的应用程序,适用于Windows(VS2008)和Linux/Mac(gcc).我希望集成一个库,目前在MS.NET(版本2.x)中编译.

我研究过并发现我可以使用MS提供的CCW接口调用库.因此,Windows中不应该有太多的实现问题.

我的问题是,如果我设法使用Linux或Mac中的Mono .NET编译库,我将如何从我的本机应用程序调用该代码?我想一个更简短的问题可能是,是否可以使用可以从非Windows平台上的本机C++代码调用的Mono编译器编译库?

谢谢!

Mik*_*son 5

是的,但你必须嵌入Mono.您的本机"主机"应用程序必须初始化Mono运行时,然后在MonoObjects上查找并执行MonoMethods.

请注意,由于P/Invoke,extern "C"从Mono 调用C API(如果使用C++)要比从C调用Mono代码要容易得多.所以你最好的策略IMO是制作一个小的C#"粘合"库,做了很多互操作工作,并为您的C++代码提供了一个更简单的API.

例如,您可以构造它,以便主机可以调用胶水库中的静态方法,然后从您正在使用的库中创建和操作对象,并使用P/Invoke回调到本机主机.

您还可以使用C#中的"不安全"代码来简化操作中的一些技巧 - 例如,主机可以将IntPtr值(指针)传递到C#glue库中,然后在不安全的C#上下文中,您可以将它们转换为指向C#结构与布局匹配主机的结构,并直接写入主机的结构.