0

コア、プラグイン、GUIがモジュール式に分離されたソフトウェアを開発しています。モジュールをオンデマンドで動的にロードします。

プラグインや異なるツールキットを使用するGUIが最終的にサードパーティによって開発されることを考慮して、このようにモジュール化されたソフトウェアにどの種類の相互通信が最適であるかを判断する必要があります。

今のところ、共有オブジェクトからシンボルをロードし、それらのタイプと関数のシグネチャを知ってそれらを操作することを検討しました。DBusのようなIPCの使用も検討しましたが、これがやり過ぎなのか、まったく不要なのかはわかりません。

クロスプラットフォームであることは、現時点ではそれほど問題ではありませんが、将来的には問題になる可能性があります。

一方と他方の長所と短所は何ですか?私が見つけていない他の解決策を検討する必要がありますか?

4

1 に答える 1

1

IPCは、インプロセスでロードされたコンポーネントにとってはやり過ぎです。呼び出し元と呼び出し先がポインターを直接共有できる場合、バッファーのサイズとコピーの方向に関する追加の注釈はすべて不要です。

Windowsに移行したい場合は、共有ライブラリのアロケータやクラスレイアウトが異なる可能性があることを考慮してください。最善の方法は、ファクトリ関数をエクスポートし、インターフェイスへのポインタを返し(純粋仮想メンバー関数のみを含み、データを含まない抽象クラスであり、データと実装はすべてサブクラスにあります)、オブジェクト自体を解放することです(仮想メンバー関数はそれを破壊します)。

たとえば、COMを見ることができますIUnknown。インターフェイスクエリなどの複雑さをすべて必要とするわけではありませんが、純粋仮想関数と参照カウントを使用することは、非常に柔軟で、非常にスケーラブルで、非常に移植性の高いパターンです。

于 2012-09-24T03:53:43.407 に答える