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

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

我在线查看了Xamarin文档,对于我来说,对于编程移动应用程序( Mono for Android和MonoTouch )的新手来说,这是非常神秘的。 如果在Visual Studio中构建一个monodroid应用程序(这是我最熟悉的),我需要从MonoDroid程序调用本机函数的具体步骤是什么。 对于C库,我可以用.DLL(动态)或.LIB(静态)forms编译。 我还认为动态库不能用于移动应用程序。

理论上可以使用P / Invokes绑定C ++库,但这不是一种特别好的方法(因为你将绑定到受损的函数名,这些函数很难理解,很可能在编译器/操作系统之间发生变化)。

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

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

最好的选择是使用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这次是否可用,但这是一个值得关注和支持的项目。