2011-07-06 13 views
4

C++(MS VS 6)とJava(JDK 6)で書かれた2つのコードベースがあります。 お互いに話をする創造的な方法を探しています。JavaアプリケーションとC++アプリケーションの統合/通信


詳細:

両方のアプリケーションがGUIアプリケーションです。
主要な書き換えや翻訳はオプションではありません。
通信は双方向である必要があります。 ファイルをディスクに書き込むことは避けてください。

これまで考えられてオプションは次のとおりです。

  • ゼロMG
  • RPC
  • CORBA
  • JNI
  • コンパイルネイティブコードへのJava、その後、基本的に

を結びます最後の項目とは別に、これはv JavaアプリケーションとC++アプリケーションとの間のプロセス間通信を実現する多彩な方法です。まだ他の創造的な提案にオープン!

あなたは、教訓、落とし穴は避けるために、あなたの提案をチャイムしてくださいする前にこの、または類似した何かをしようとした場合など


誰かは間違いなく誰もが存在しないことを、すぐに指摘しませんこの質問に対する正解。とにかくSOコミュニティの総合的な専門知識を活用し、多くの優秀な回答を得ることを願っています。

+1

、私は非常に(http://stackoverflow.com/ [JNAを考慮すると、JNAグルーコードを書く]お勧めします質問//2242341#2242341 2241685/javaのネイティブ・アクセス-doesntの-DO-C-右)、それはIMO、簡単です。 –

+0

SOAPについてはどうですか? –

+0

@bguiz:どうしましたか?助言の提案はありますか? –

答えて

0

どのくらいのデータとどのタイプのデータを転送して通信したいのかわかりません。 しかし、方法を簡略化するために、HTTPプロトコルに基づいてXMLまたはJsonを使用することをお勧めします。

両方のアプリケーションにライブラリがたくさんあり、実装や理解に多大な労力を費やすことはありません。

さらに、あなたが話すアプリケーションがあれば、それは両方の技術から難しいことではありません。クロス・ランゲージです。私は

1

まあ間違っている場合

が私を修正し、それはあなたがこれらのアプリケーションがあることを、どのようにあなたは彼らが将来的に進化して見たいどのように緊密に統合さに依存します。その2つの間でデータをやりとりしたい場合(たとえば、相手が書き込んだファイルを開くことができるようにしたい場合や、他から直接ストリームを読み込む場合など)、protocol buffersが最善の策です。これらのGUIアプリケーションの1つでレンダリングされたウィンドウを他のGUIアプリケーションのパネルに実際に埋め込むには、おそらくJNIのアプローチを使用したいと思うでしょう。 JNIのアプローチでは、多くの自動化にはSWIGを使うことができますが、それは危険で魔法的であり、いくつかの注意点があります(関数オーバーロードなどでうまくいかないなど)。

CORBA、RMI、および同様のリモートプロシージャコール実装に対しては、私の経験上、非常に重い傾向にあり、多くのリソースを消費する傾向があるため、これを強くお勧めします。RMIに似たものが必要な場合は、実際のオブジェクトではなく、メッセージを渡す場所を軽くすることをお勧めします(RMIの場合のように)。たとえば、プロトコルバッファをメッセージフォーマットとして使用して、通常のソケットでこれらを前後にシンプルにすることができます。

キット・ホーは、XMLやJSONを述べたが、プロトコル・バッファーが大きく、これらのいずれかの形式よりも効率的であり、また定義言語に直接組み込ま後方互換性の概念を持っています。

+0

これはDDSが何であるか(パブ/サブ) –

+0

+1 SWIGのために、私はそれを見てみよう – bguiz

1

Windowsを使っているので、私はDDE (Dynamic Data Exchange)を使用してお勧めしたいです。 Java Partsから入手できるJavaライブラリがあります。書き換えは望ましくなく、あなたがJNIグルー・コードを記述する必要がありますこのような状況では

+0

+1 @Ben Jaguar Marshall:ありがとうその提案、私はそれを調べます – bguiz

関連する問題