2009-05-20 16 views
3

私は2つのデスクトップアプリケーションを外部アプリケーションと統合したいと考えています。アプリケーションの1つは、すべてのディストリビューションに共通ではない特定の機能を提供するために、私が開発したプラグインで拡張されています。状況は次の図で説明することができます:私が述べたように私のアプリケーションと外部アプリケーションの統合

alt text http://img32.imageshack.us/img32/8902/integration1.png

、私は(受信したデータを送信する)外部アプリケーションやSDKのと私のアプリケーションを統合します。通常、そこに外部アプリケーションからのデータの2種類:

  1. 一般/共通データ - 常に関連
  2. 具体的なデータである - コアアプリケーション」では、各外部アプリケーション

のために異なる方法で処理されなければなりません」、指名手配の状況は、この図で説明されることができます。

alt text http://img32.imageshack.us/img32/3299/integration2.png

一般的なデータIコアアプリケーションで処理され、特定のデータはプラグイン(サポートプラグイン)で処理されます。

このアプリケーションの配布は

  • コアアプリケーション+ YakkoのApp + YakkoのAppインテグレータ+ Yakkoアプリのサポートプラグイン
  • コアアプリケーション+ドットのApp +ドットのAppインテグレータ
の一つかもしれません

他のアプリケーションでは、同じ「インテグレータ」を保持したいが、アプリケーション内でそれらを別々に扱いたい。

alt text http://img32.imageshack.us/img32/2088/integration3x.png

ここで説明したように、外部アプリケーションとSDKSを統合するためのアプリケーションでのサポートを実装するにはどうすればよいですか?

注:

  • 私はWindows上でC++を使用していますし、プラグインはのDLLとして配布されています。
  • 使用するデータ型は常に事前にわかっています。ソースからハンドラに移動するには一般的な方法が必要です。
+0

COMはあなたのためには機能しませんか? –

+0

COMはこれで動作しますが、それは私にとっては複雑すぎるようです。私はメッセージベースの解決策のいくつかの種類がより簡単かもしれないと思ったが、より多くの意見を得たいと思った。 – kshahar

+0

「よりシンプルな」ソリューションをお探しなら、cOMがあなたに与えることの多くを再実装することになります。 –

答えて

1

コメント者に同意すると、COMは良い戦略のようです。 あなたのサポートDLLが何かのように、それらがインストールされている場合、その後、あなたのコアアプリがプラグインを探すことができ、登録を取得:

hr = CLSIDFromProgID(L"Wakko.1.0", &clsid); 
hr = GetActiveObject(clsid, NULL, &punk); 

または
hr = CoCreateInstance(clsid, ...,..., IID_IWAKKO, ...);

0

窓がhere

を持っているIPCのオプションを見

私にとっても、COMはここでは良いオプションのように見えます。

これを行うもう1つの方法は、コアアプリケーションにプラグインからの呼び出しをリッスンするサーバーを実行させることです。名前パイプを使用すると、これを実現できます。さて、あなたのサポートアプリはこれらのプラグインを使ってコアアプリケーションと(名前付きパイプで)通信します。