如何在 Mono for Android (monodroid) 和 MonoTouch 中使用原生C++库

本文关键字:MonoTouch 原生 C++ Mono for Android monodroid | 更新日期: 2023-09-27 18:31:08

我有兴趣使用Mono for Android和MonoTouch来构建移动应用程序,这些应用程序可以利用我拥有的大量C++原生库。我可以在 iOS 或 Android 上获得有关如何调用方法或将代码合并到我的最终移动应用程序中的一些具体说明吗?

我在网上看过Xamarin文档,作为一个刚开始编程移动应用程序(Mono for Android和MonoTouch)的人来说,这对我来说非常神秘。在Visual Studio中构建单机器人应用程序的情况下(这是我最熟悉的),我需要从我的MonoDroid程序调用本机函数的具体步骤是什么。对于 C 库,我可以用.DLL(动态)或 .LIB(静态)形式。我的印象是动态库不能用于移动应用程序。

如何在 Mono for Android (monodroid) 和 MonoTouch 中使用原生C++库

理论上可以使用 P/Invokes 绑定C++库,但这不是一种特别好的方法(因为您将绑定到损坏的函数名称,这些名称非常难以理解,并且可能会在编译器/操作系统之间更改)。

访问C++库的推荐方法是创建一个 C API 并使用 P/Invoke(你可以在 Web 上找到很多关于如何执行 P/Invoking 的信息,这里有一个开始的地方:http://mono-project.com/Dllimport)。

此外,对于MonoTouch,无法使用动态库(这是Apple的限制),您必须使用静态库。我不知道Android的Mono是否有这样的限制。

最佳选择是使用 Swig 为可从 C# 访问的C++库创建绑定。

以下是描述:

http://www.swig.org/Doc1.3/CSharp.html

Cxxi 不适用于 Monotouch。当我上周遇到同样的问题时,我在博客上写了关于如何让SWIG适用于单点触控的博客:

http://blog.reblochon.org/2013/01/c-bindings-for-monotouch-using-swig.html

这篇来自Miguel的博客文章是关于该主题的有趣读物。

CXXI:桥接C++和 C# 世界。

我不知道CXXI这次是否有空,但这是一个值得关注和支持的项目。