2013-04-09 42 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