2010-09-08 62 views
3

首先,我想指出,我沒有使用Mono.NET的經驗,所以如果問題很愚蠢,請耐心等待。在Linux中使用Mono.NET庫

我正在研究用本地C++代碼編寫並在Windows(VS2008)和Linux/Mac(gcc)中工作的應用程序。有一個我期待整合的庫,目前它已經在MS.NET(版本2.x)中編譯。

我研究並發現,我可以使用MS提供的CCW接口調用庫。因此,Windows中不應該有太多的實施困境。

我的問題是,如果我設法使用Linux或Mac中的Mono .NET編譯庫,我將如何從本機應用程序調用該代碼?我想一個更簡短的問題可能是,是否有可能編譯庫的Mono編譯器,可以從非Windows平臺上的本地C++代碼調用?

謝謝!

回答

5

是的,但你必須embed Mono。您的本機「主機」應用程序必須初始化Mono運行時,然後在MonoObjects上查找並執行MonoMethods。

請注意,由於P/Invoke從Mono調用C API(即使用C++的extern "C")要比從C調用Mono代碼容易得多。因此,您的最佳策略IMO將製作一個小的C#「膠水「這個庫可以完成很多互操作工作,併爲您的C++代碼使用更簡單的API。例如,您可以將它構造爲使主機可以在粘合庫中調用一個靜態方法,然後該方法將從您正在使用的庫中創建和操作對象,並使用P/Invoke將回調創建到本機主機中。你可以在C#中使用「不安全」代碼來簡化事情 - 例如,主機可以將IntPtr值(指針)傳遞到C#膠粘庫中,然後在不安全的C#上下文中,您可以投射他們指向C#結構,其佈局與主機結構相匹配,並直接寫入主機的結構。

+0

您是否知道是否可以提前編譯單聲道庫以使其完全原生,從而在編譯完成後不再需要單聲道運行時?見http://www.mono-project.com/AOT – craigrs84 2014-08-06 20:12:06