使用单声道的freepascal库(.dylib)

时间:2011-01-05 03:00:37

标签: c# delphi xamarin.ios freepascal dylib

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

所以我的问题有两个:

  1. 如果我为了争论而有 用普通对象编写的库 Pascal没有外部依赖 并使用ARM freepascal编译 iPhone的编译器 - 我可以使用 由monotouch产生的dylib?
  2. 如果以上是正确的,我如何从C#/ Prism声明并调用这些外部函数?我如何处理单声道传递记录类型等?
  3. 我注意到其他iPhone应用程序附带了自己的dylib文件(SDL游戏库就是一个典型的例子)。我发现没有理由不这样做。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

P/Invoke in Mono

答案 1 :(得分:1)

我对单声道触摸一无所知,而对于与Arm设备有关的Mac则不太了解,但是:

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

结构相同,用{$ packrecords C}声明。

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

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