c# - 如何从 C++ 为 Xamarin.Android 创建 C# DLL

标签 c# android xamarin xamarin.android swig

我有一个使用 Xamarin.IOS 用 C# 编写的 iPad 应用程序,它使用一些 C++ 代码,这些代码已按照说明 here 构建到 C# DLL 中。 .

我现在想添加我的应用程序的 Android 版本,所以我需要构建一个兼容的 DLL 版本。

对于 Xamarin.IOS 版本,流程本质上是:

  1. C++代码用XCode编译成lib.a文件
  2. SWIG 用于从 C++ 头文件生成一些 C# 接口(interface)文件
  3. XCode 从 SWIG 生成的文件之一构建一个 libWrapper.a 文件
  4. SMCS(好像是Xamarin tool命令行工具)将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 项目中?

最佳答案

Android NDK 将生成一个 .so 文件。您可以使用与 iOS 包装器中相同的 PInvoke 方法。我之前在 Android 中使用过 SWIG,所以应该没有任何区别,因为它是 C 接口(interface)。

将 .so 文件添加到库项目并将其设置为构建为 EmbeddedNativeLibrary。

http://developer.xamarin.com/guides/android/advanced_topics/using_native_libraries/

关于c# - 如何从 C++ 为 Xamarin.Android 创建 C# DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25314883/

相关文章:

c# - 在自定义 UserControl 上强制使用透明背景

c# - 我可以使用 outlook 2003 interop 读取 .msg 文件及其嵌入图像吗

c# - 如何在网站上进行 SPARQL 查询

c# - Xamarin IDE 访问路径被拒绝

c# - 字节数组转pdf

android - 如何获取传入 xmpp 消息的时间戳?

android - 如何在电话到达android时不完成 Activity ?

android - react native android 中 GIF 图像的圆角问题

android - Xamarin RecyclerView Click 事件获取多个上下文

xamarin.ios - 使用 Xamarin.iOS 通过代码创建简单的用户界面