如何从 C++ 为 Xamarin.Android 创建 C# DLL
Posted
技术标签:
【中文标题】如何从 C++ 为 Xamarin.Android 创建 C# DLL【英文标题】:How to create a C# DLL for Xamarin.Android from C++ 【发布时间】:2014-08-14 18:15:57 【问题描述】:我有一个使用 Xamarin.ios 用 C# 编写的 iPad 应用程序,该应用程序使用一些 C++ 代码,这些代码已按照说明 here 内置到 C# DLL 中。
我现在想要添加我的应用程序的 android 版本,因此我需要构建一个兼容的 DLL 版本。
对于Xamarin.IOS版本,流程本质上是:
-
C++ 代码用 XCode 编译成一个 lib.a 文件
SWIG 用于从 C++ 头文件生成一些 C# 接口文件
XCode 从 SWIG 生成的文件之一构建 libWrapper.a 文件
SMCS(似乎是一个 Xamarin 工具命令行工具)将 lib.a、libWrapper.a 和一个 AssemblyInfo.cs 文件组合到一个 C# dll 中,可以将其添加为对 iPad 项目的引用。
使用已经在 Xamarin.Android 项目中生成的 DLL 不起作用(它会给出 P/Invoke EntryPointNotFound 错误),可能是因为它是为 iOS 设备(i386、arm7 和 arm7s)构建的,需要构建Android 有什么不同?
我认为我需要使用 Android NDK 来编译 C++(而不是 XCode),但这会产生什么以及如何将其转换为 C# DLL 以便将其添加到我的 Xamarin.Android 项目中?
【问题讨论】:
【参考方案1】:Android NDK 将生成一个 .so 文件。您可以使用与 iOS 包装器中相同的 PInvoke 方法。我之前在 Android 上使用过 SWIG,所以应该没有任何区别,因为它是 C 接口。
将 .so 文件添加到库项目并将其设置为构建为 EmbeddedNativeLibrary。
http://developer.xamarin.com/guides/android/advanced_topics/using_native_libraries/
【讨论】:
以上是关于如何从 C++ 为 Xamarin.Android 创建 C# DLL的主要内容,如果未能解决你的问题,请参考以下文章
如何在xamarin android中将位图图像转换为gif?
如何从xamarin表单应用程序中的PCL项目访问android原生布局文件?
Xamarin Android - 如何在textview动画期间阻止文本移动
Xamarin Android:以编程方式从 colors.xml 获取颜色值