2

虽然学习 C# 和 Delphi Prism 以与 monotouch 一起使用是有益的,但我正在寻找一种方法来重用用普通 Object Pascal 编写的代码。简单地重写我 15 年来在 Delphi 中所做的一切是完全不能接受的。

所以我的问题是双重的:

  1. 如果为了争论,我有一个用普通 Object Pascal 编写的库,没有外部依赖项,并用 iPhone 的 ARM freepascal 编译器编译 - 我可以使用 monotouch 生成的 dylib 吗?
  2. 如果以上是正确的,我如何从 C#/Prism 声明和调用这些外部函数?我如何处理单声道中的传递记录类型等?

我注意到其他 iPhone 应用程序附带了它们自己的 dylib 文件(SDL 游戏库就是一个典型的例子)。我找不到为什么这不起作用的原因。

4

2 回答 2

3

我没有使用过 monotouch,但 Mono/.NET 有一个称为 P/Invoke(平台调用)的功能。

基本上,您在托管代码中将您的函数/过程声明为 extern 并添加一个DLLImport属性。

与其名称相反,它还从Linux 上的文件和文件中DLLImport导入函数/过程。.so.dylib

http://www.mono-project.com/Interop_with_Native_Libraries

单声道中的 P/Invoke

于 2011-01-05T10:12:44.817 回答
1

我对单点触控一无所知,对与 Arm 设备相关的 Mac 也知之甚少,但是:

如果您的 lib 主要使用 cdecl 调用约定,并且 monotouch 可能会通过某些本机操作机制(P/Invoke 或 JNI 之类的东西)调用 cdecl (C) 函数,那么这将是一个可行的基本原则。

结构也一样,用 {$packrecords C} 声明。

在调用函数之前,您可能还需要调用两个函数(IIRC FPC_INITIIALIZE,另一个要完成)来初始化/完成 FPC RTL。

任何高于普通 C 级别的东西,例如 Delphi 对象等可能不可用,并且必须被包装。也许客观Pascal 对象是可重用的(至少如果 monotouch 理解客观 C 对象),但与大多数其他 Apple 特定的东西一样,这不是我的强项。

于 2011-01-05T08:59:35.707 回答