2009-05-28 7 views
6

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

更新:

私はDelphiで静的リンクの気まぐれに精通していますし、DLLと完全に幸せになります。 Mono自体には依存関係があるので、もう1つのDLLは本当に大きな問題ではありません。 CGのデフォルト設定がマイクロソフトのツールと異なると思うので、FPU制御ワードに関するコメントは私の懸念の一つです。ここで私は必要とされていると考えているものです。(おそらくあまりにもハード)「C」からデルファイへ

  • ヘッダ変換
  • モノDLLのコンパイルは、(使用可能なモノに同梱一つです?)
  • Aは、 FPU制御ワードgocthaの(たぶんなし)をより良く理解
  • このスタントを試してみましたから、戦いの傷を持っている人からいくつかのフィードバック;)

アップデート(2011年6月12日):

誰もが興味を持っている場合は、私はちょうど見つけDelphiアプリケーションでモノを埋め込むためのGoogleのコードでプロジェクト:

monoemb4delphi

答えて

6

モノはmingwでビルド可能なようですが、私はLinuxからクロスコンパイルされたほとんどのリファレンスがあります。私はあなたの最初の優先順位は

  • はCygwinを使用していないことその他のlibmono DLLを探していると言うだろうhttp://www.mono-project.com/Cross-compiling_Mono_for_Windows

    (私を信じて)

  • が動作することが知られ、また、外部のmingwの(可能mingwの特定を避けますC++が使用されている場合はC++マングリング)
  • 好ましくは、読めるヘッダーが付いています。

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

VMはまったく些細な獣ではなく、通常のクロス言語問題ドメイン(ライブラリの初期化(順序)、FPU例外マスク、一般的な例外処理)の問題を予期します。部分的には、私が「mingwの外で働くことを知っている」と言った理由もあります。他のコンパイラでどのようにインターフェイスされているかを調べることで、これに適切に対処する方法を教えるかもしれません。

monoチュートリアルにはmono lib初期化子がありますが、monoを使用するすべてのlibが適切に初期化されているわけではありません。特にmingwのlibcは、通常はctorsを使用して初期化されるため、初期化が必要な場合があります。私(非常に初期)mingwのグルーコードはここにある:一方

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

、DLLにはDLL初期化ルーチンを経​​由して初期化される可能性があります。

私は自分自身が、あなたが本当にあれば(それはオプションだったので、私はDLLを作るモチベーションを持っていなかった、しかし静的FPCに)

注libのようGDBを構築し、それを使用することができましたこれは簡単な方法ではありません。

+1

Monoランタイムは、Visual Studio 2008でもビルド可能ですが、役立つかどうかわかりません。ソリューションファイルは/ mono/msvcにあります。 – jpobst

+0

私はDelphiの唯一の方法であるDLLの方が良いと思います。 (理論的には、BCBで構築された場合は静的にも機能するはずです) –

2

このarticle by Rudy Velthuisは、DelphiにCのlibがリンクする方法の例を示します。ちょっとした作業で、このテクニックを使ってDelphiからmono_jit_initにアクセスすることは可能です。

+0

MonoはLGPLなので、Windowsでの静的リンクでは、http://www.mono-project.com/Scripting_With_Mono(「ライセンス」を検索)に記載されているように、Novellの商用ライセンスを取得する必要があります。 – mghie

+0

あなたはそれを正しく読んでいますか? mono *と*を埋め込みたい場合は商用ライセンスが必要だと理解していますが、アプリケーションのモノラルビットへのアクセスを拒否して、つまらないようにしたいと思います。 –

+0

リンクされた記事は、CライブラリをDelphiコードに静的にリンクすることに関連しています。このようにMonoをリンクすると、ライセンスを破棄することができます。これは、もはや新しいバージョンに置き換えることはできません。 LGPLはユーザーの権利を「変える」権利を守るために存在します。 OTOH mono.dllを使用する場合、DLLを使用する標準的な方法が適用され、Velthuisの記事の情報は実際には役に立ちません。 – mghie

2

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

+0

私はヒドラを持っていますが、私が達成しようとしていることには本当に対応していません。つまり、.Netランタイムを組み込み、Delphiとの緊密なネイティブな統合を実現することができます。ヒドラは素晴らしいツールです。 –

関連する問題