9

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

我已经在线查看了 Xamarin 文档,对于刚接触编程移动应用程序(AndroidMonoTouch的 Mono )的人来说,这对我来说非常神秘。在 Visual Studio 中构建一个 monodroid 应用程序(这是我最熟悉的)的情况下,我需要从我的 MonoDroid 程序调用本机函数的具体步骤是什么。对于 C 库,我可以编译为 .DLL(动态)或 .LIB(静态)形式。我也觉得动态库不能用于移动应用程序。

4

4 回答 4

9

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

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

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

于 2012-04-13T21:17:54.030 回答
5

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

这是一个描述:

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

于 2012-04-20T21:50:58.603 回答
3

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

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

于 2013-01-24T11:42:34.157 回答
2

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

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

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

于 2012-04-14T01:55:14.533 回答