2013-04-09 49 views
11

Tôi đã thực hiện hai chức năng đơn giản (thiết lập và trả về một int) trên nhật thực (dự án Android) trong C. Tôi đã sử dụng ndk-build để tạo ra một .so. Làm thế nào tôi có thể sử dụng này .so trên Xamarin và tiêu thụ hai chức năng trên Xamarin.Android dự án của tôi?Xamarin: sử dụng NDK-xây dựng .so

Cảm ơn!

Trả lời

13

Giả sử chúng tôi có một thư viện được chia sẻ có tên là MyTest.so và chúng tôi muốn sử dụng nó trong dự án Xamarin.Android. MyTest.so bao gồm một hàm

int MyTest_GetValue();

Bây giờ, chúng tôi cần sử dụng chức năng này trên dự án Xamarin.Android. Dưới đây là các bước để thành công:

Bước 1: Tạo thư mục mới bên trong dự án Xamarin.Android có tên là lib và thư mục con thư mục con. Sao chép thư viện .so của tôi để được sử dụng bên trong thư mục armeabi như đã nêu here

Bước 2: Đặt thuộc tính của thư viện.so (thư viện đã nhập) Xây dựng hành động cho "AndroidNativeLibrary" và Sao chép sang đầu ra thành "Luôn sao chép".

Bước 3: (Làm việc trong Xamarin.Android Lớp ví dụ: MainActivity.cs)

  • Bao gồm InteropServices namespace bằng cách “sử dụng System.Runtime.InteropServices;”

  • Sử dụng DllImport tiêu chuẩn trong dự án để nhập thư viện gốc như sau: [DllImport ("MyTest.so")] public extern static int MyTest_GetValue(); // với Tên câu hỏi chính xác, Loại & Params trong .so Lib.

Bước 4: Sử dụng hàm trên (MyTest_GetValue()) trong ứng dụng.

Ví dụ:

int value = MyTest_GetValue();

Console.Writeline (value.ToString());

Nhiệm vụ hoàn thành!: D

+0

Bạn có thể hiển thị hàm mẫu với đối số [out] không? Giống như bool MyTest_GetValue (chuỗi * retVal); Cảm ơn – hrz

+0

Theo như tôi có thể nghĩ đến, không nên có bất kỳ khác biệt nào khi sử dụng [đối số]. Thực hiện các bước 1 & 2, sau đó bước 3 bao gồm chức năng với các đối số [out] và cuối cùng là bước 4 để tiêu thụ chức năng đó sẽ hoạt động tốt. Lưu ý: Xamarin đã thay đổi rất nhiều kể từ năm 2013 (câu hỏi này). –

Các vấn đề liên quan