7

Mono ランタイムを Delphi Win32 アプリケーションに埋め込む方法の詳細を知っている人はいますか? 公式ドキュメントは、Win32 環境 ( www.mono-project.com/Embedding_Mono )に関してはあまり役に立ちません。

アップデート:

私は Delphi での静的リンクの気まぐれに精通しており、DLL に完全に満足しています。Mono 自体には依存関係があるため、もう 1 つの DLL は実際には大したことではありません。FPU コントロール ワードに関するコメントは、CG のデフォルト設定が Microsoft ツールとは異なると考えているため、私の懸念事項の 1 つです。ここに私が必要だと信じているものがあります:

  • 「C」から Delphi へのヘッダー変換 (おそらくそれほど難しくありません)
  • Mono DLL のコンパイル (Mono に同梱されているものは使用可能ですか?)
  • FPU 制御ワード goctha の理解が深まる (できればなし)
  • このスタントを試したことによる戦闘の傷跡がある人からのフィードバック ;)

更新 (2011 年 6 月 12 日):

誰かが興味を持っている場合に備えて、Mono を Delphi アプリケーションに埋め込むためのプロジェクトを Google Code で見つけました。

monoemb4delphi

4

3 に答える 3

6

Mono は mingw でビルドできるようですが、ほとんどの参考文献は Linux からクロスコンパイルされています。

あなたの最優先事項は、libmono dllを検索することだと思います

  • cygwin を使用しません (私を信じてください)
  • mingw の外部でも動作することが知られています (C++ が使用されている場合、mingw 固有の C++ マングリングの可能性を回避します)。
  • できれば、読み取り可能なヘッダーが付属しています。

(mghieの正しい発言を満たすために)DLLとして見つけたりビルドしたりする場合は、(Stijnが示唆するように)ヘッダーを記述してください。

ただし、VM は単純な獣ではなく、通常の言語間の問題領域 (ライブラリの初期化 (順序)、FPU 例外マスク、一般的な例外処理) で問題が発生することが予想されます。部分的には、「mingw の外で作業することを知っている」と言った理由でもあります。他のコンパイラでどのようにインターフェイスされているかを研究することで、これに適切に取り組む方法の指針が得られるかもしれません。

mono チュートリアルには mono lib イニシャライザがありますが、mono が使用するすべてのライブラリが適切に初期化されているわけではありません。特に mingw の libc は、通常は ctor を介して初期化されるため、初期化が必要になる場合があります。私の(非常に初期の)mingwグルーコードは次のとおりです。

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/fpmingw.pas?view=markup

一方、DLL では、DLL 初期化ルーチンを介して初期化される場合があります。

私自身、GDB を lib としてビルドして使用することができました (ただし、FPC では静的に、オプションだったので DLL を作成する動機がありませんでした)。

本当に自分でこれをしなければならない場合、これは簡単な方法ではないことに注意してください。

于 2009-05-28T08:39:40.457 に答える
2

Rudy Velthuis によるこの記事では、C ライブラリを Delphi にリンクする方法の例を示しています。少し作業すれば、mono_jit_initこの手法を使用して Delphi からアクセスできるようになります。

于 2009-05-28T07:11:49.183 に答える
2

http://www.remobjects.com/hydra.aspxをご覧ください。

于 2009-05-28T08:20:35.240 に答える