如何从 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 获取颜色值

如何从Xamarin Android Activity中调用MvxViewModel?

无法使用 C# 从 Xamarin.iOs 和 Xamarin.Android 连接到 MySql