2013-04-09 41 views
11

我在C中的eclipse(Android項目)上做了兩個簡單的函數(設置並返回一個int)。我使用ndk-build來生成一個.so。我如何在Xamarin上使用這個.so,並在Xamarin.Android項目上使用這兩個函數?Xamarin:使用NDK構建的.so

謝謝!

回答

13

我們假設我們有一個名爲MyTest.so的共享庫,我們想在Xamarin.Android項目中使用它。 MyTest.so包含一個函數

int MyTest_GetValue();

現在,我們需要在Xamarin.Android項目上使用這個函數。下面是成功的步驟:

第1步:在Xamarin.Android項目中創建一個名爲lib和子文件夾armeabi的新文件夾。按照說明覆制我的.so庫以用於armeabi文件夾here

步驟2:將library.so(導入的庫)的屬性設置爲「AndroidNativeLibrary」的構建操作並複製爲輸出到「始終複製」。

步驟3:(在Xamarin.Android類例如工作:MainActivity.cs)

  • 由包括命名空間InteropServices「使用System.Runtime.InteropServices;」

  • 使用標準的DllImport導入本地庫的項目如下: [DllImport(「MyTest.so」)] public extern static int MyTest_GetValue(); //具有確切的函數名稱,類型& .so Lib中的參數。

第4步:在應用程序中使用上面的函數(MyTest_GetValue())。

例如:

int值= MyTest_GetValue();

Console.Writeline(value.ToString());

任務完成!:D

+0

你可以用[out]參數顯示一個示例函數嗎?像 bool MyTest_GetValue(string * retVal); 謝謝 – hrz 2016-06-29 06:30:56

+0

據我所知,使用[out]參數不應該有任何不同。執行步驟1和2,然後執行步驟3,其中包含帶[out]參數的函數,最後執行步驟4以消耗該函數應該可以正常工作。 注意:Xamarin自2013年以來發生了很大變化(這個問題)。 – 2016-06-30 19:51:12