4

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

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

4

1 回答 1

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 声明是可移植的(例如 32 位和 64 位类型)。

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

于 2012-04-11T04:05:28.203 回答