在Linux中使用Mono.NET库

时间:2010-09-08 22:57:11

标签: .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编译器编译库?

谢谢!

1 个答案:

答案 0 :(得分:5)

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

请注意,由于P/Invoke,从Mono调用C API(例如使用C ++时为extern "C")比从C调用Mono代码要容易得多。所以你最好的策略是IMO是一个小型的C#“glue”库,可以完成很多互操作工作,并为您的C ++代码提供一个更简单的API供您使用。

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

你可以使用C#中的“不安全”代码来简化一些操作 - 例如,主机可以将IntPtr值(指针)传递到C#glue库中,然后在不安全的C#上下文中你可以使用它们指向C#结构,其布局与主机的结构相匹配,并直接写入主机的结构。