在MonoTouch和MonoDroid中使用C DLL

时间:2012-04-11 00:10:00

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

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

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

1 个答案:

答案 0 :(得分:7)

  

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

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

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

  

如果我在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之外)。