2

モノタッチで使用するためのC#とDelphi Prismを学ぶことはやりがいがありますが、私は通常のObjectPascalで記述されたコードを再利用する方法を探しています。私がDelphiで15年間行ってきたすべてのことを単純に書き直すことは、単純に受け入れられません。

だから私の質問は2つあります:

  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 in Mono

于 2011-01-05T10:12:44.817 に答える
1

私はモノタッチについては何も知りませんし、Armデバイスに関連するMacについても知りませんが:

libが主にcdecl呼び出し規約を使用していて、monotouchがネイティブ操作メカニズム(P / InvokeまたはJNIのようなもの)を介してcdecl(C)関数を呼び出すことができる場合、それは機能する基本原則になります。

構造体についても同じで、{$packrecordsC}で宣言します。

関数を呼び出す前に、2つの関数(IIRC FPC_INITIIALIZEと、もう1つをファイナライズする)を呼び出してFPCRTLを初期化/ファイナライズする必要がある場合もあります。

Delphiオブジェクトなど、プレーンCレベルを超えるものはおそらく使用できないため、ラップする必要があります。たぶん、Objective Pascalオブジェクトは再利用可能です(少なくともmonotouchがObjective Cオブジェクトを理解している場合)が、他のほとんどのApple固有のものと同様に、それは私の得意ではありません。

于 2011-01-05T08:59:35.707 に答える