在Linux中使用Mono.NET库

提问

首先,我想指出我没有使用Mono.NET的经验,所以如果问题很愚蠢,请多包涵.

我正在使用本机C代码编写的应用程序,并且可以在Windows(VS2008)和Linux / Mac(gcc)中工作.我要集成一个库,该库当前在MS.NET(版本2.x)中进行编译.

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

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

谢谢!

最佳答案

是的,但您必须设置为embed Mono.您的本机“主机”应用程序必须初始化Mono运行时,然后在MonoObjects上查找并执行MonoMethods.

请注意,由于P/Invoke的原因,从Mono调用C API(即,如果使用C则用extern“ C”)要比从C调用Mono代码要容易得多.因此,最好的IMO策略是制作一个小的C#“ glue”该库完成了许多互操作工作,并公开了更简单的API供您的C代码使用.

例如,您可以对其进行结构化,以便主机可以在粘胶库中调用静态方法,该方法然后可以从您正在使用的库中创建和操作对象,并使用P / Invoke回调本机主机.

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