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

时间:2012-04-13 19:30:27

标签: c# mono xamarin.ios monodevelop xamarin.android

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

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

4 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:5)

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

以下是说明:

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

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

CXXI: Bridging the C++ and C# worlds.

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