在MonoTouch和MonoDroid中使用C DLL

4

我刚开始使用.NET,但我对使用MonoTouch / Droid编写可共享一些核心代码的移动应用程序很感兴趣。

我有许多我希望使用的C风格API库,例如libxml2。我如何在Mono中调用这些本地库方法?如果我在Windows上开发,能否使用从Windows编译的相同二进制文件?如果我在OS X上开发,能否使用Windows二进制文件?


2
Mono自带一个XML库。但是,不能在OS X(或iOS或Android)中使用本机Windows二进制文件。 - Marcelo Cantos
1个回答

7
我该如何在Mono中调用这些本地库方法?
您可以使用p/invoke(平台调用)从任何.NET语言调用本机C代码。您需要编写这些声明(或找到之前做过的人)才能使用本机库。像@Marcelo评论的那样,大多数C库都有非常好的、易于使用的.NET替代品。
这也适用于MonoTouch。但是,您需要提供一个静态库(OSX上的 .a ,类似于Windows上的 .lib ),因为Apple iOS不允许链接用户提供的动态库(OSX / iOS上的 .dylib 和Windows上的 .dll )。
我在Windows开发时是否可以使用从Windows编译的相同二进制文件?
Windows生成的二进制文件应该可以在Windows上的Mono上正常运行。您也可以在Windows上使用Microsoft .NET。
如果我在OS X上开发,是否可以使用Windows二进制文件?
如果二进制文件是.NET编译代码,那么可以 - 只要您的p / invoke声明是可移植的(例如32位与64位类型)。
如果二进制文件是本机代码,则不行。请记住,Mono不是Windows模拟器。它运行CIL代码,位于.EXE或.DLL中,但它不会运行本机Windows代码或提供对Windows本机API的访问(在Windows之外)。

我能否得到一些有关如何引用静态本地库的进一步指导?我找到的资源似乎只针对链接动态库进行了说明。 - user1027169
我刚刚发现了这篇帖子,它说在.NET中无法链接静态库。那么我该如何在MonoTouch中使用我的C++库呢? - user1027169
这篇文章是正确的:在 Microsoft .NET 中不可能实现。但是在 Mono 中可以实现(当您嵌入运行时)并且在 MonoTouch 中也可以实现(因为它是 iOS 的一个要求)。 - poupou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接