在MonoTouch和MonoDroid中使用C DLL

use*_*169 4 c# mono monodevelop xamarin.ios xamarin.android

我是使用.NET的新手,但我有兴趣使用MonoTouch/Droid来编写可以共享一些核心代码的移动应用程序.

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

pou*_*pou 7

如何在Mono中调用这些本机库方法?

您可以使用p/invoke(平台调用)从任何.NET语言调用本机C代码.您需要编写这些声明(找到在您之前完成它的人)来使用本机库.就像@Marcelo评论的那样,对于大多数C库来说,通常都有非常好的,容易使用的.NET替代品.

这也适用于MonoTouch.但是,您需要提供静态库(.a在OSX上,如.lib在Windows上),因为Apple iOS不允许链接用户提供的动态库(.dylib在OSX/iOS和.dllWindows上).

如果我在Windows中开发,我可以使用从Windows编译的相同二进制文件吗?

Windows生成的二进制文件应该可以在Windows上运行Mono.您也可以在Windows上使用Microsoft .NET.

如果我在OS X中开发,我可以使用Windows二进制文件吗?

如果二进制文件是.NET编译代码则 - 只要你的p/invoke declrations是可移植的(例如32对64位类型).

如果二进制文件是本机代码,则不.请记住,Mono不是Windows模拟器.它在.EXE或.DLL中运行CIL代码,但它不会运行本机Windows代码或提供对Windows本机API(Windows外部)的访问.