少なくとも 2 つの Windows プロセス間でインスタンスを共有する必要がある C++ クラスを作成しました。これを行うためのさまざまな方法は何ですか?
最初に#pragma data_segを調べましたが、クラスやヒープに割り当てられるものでは機能しないことに気付いたときだけがっかりしました。
クラスのインスタンスは、既存の完全なアプリケーションが既にこの dll を使用しているため、dll を介してアクセスできる必要があります。
少なくとも 2 つの Windows プロセス間でインスタンスを共有する必要がある C++ クラスを作成しました。これを行うためのさまざまな方法は何ですか?
最初に#pragma data_segを調べましたが、クラスやヒープに割り当てられるものでは機能しないことに気付いたときだけがっかりしました。
クラスのインスタンスは、既存の完全なアプリケーションが既にこの dll を使用しているため、dll を介してアクセスできる必要があります。
メモリ マップト ファイルを使用して、プロセス間でデータを共有できる可能性があります。オブジェクトで関数を呼び出す必要がある場合は、COM などを使用するか、独自の RPC プロトコルを実装する必要があります。
Boost::interprocessを調べてください。慣れるまで少し時間がかかりますが、とてもうまく機能します。プロセス間で正常に機能する比較的複雑なデータ構造を共有メモリに作成しました。
編集:メモリマップファイルでも動作します。ポイントは、構造化された方法でデータを使用できることです。メモリ ブロック (ファイルまたは共有メモリ内) を、有効な状態のままにしておくために慎重に読み書きする必要がある単なる生データとして扱う必要はありません。Boost::interprocess がその部分を処理し、ツリー、リストなどの STL コンテナーを使用できます。
共有メモリ ゾーンにオブジェクトを作成するには、placement new を使用できます。オブジェクトがポインターを使用しない限り、問題はありません。
それは POD ですか、それとも単一のインスタンスをプロセス間で共有できるようにする必要がありますか? シングルトン パターン (スレッド セーフの理由から、静的初期化バージョン) の使用を検討しましたか? 同時書き込みなどを保護するために、ミューテックスも使用する必要があります。
Windows では、COM も使用できます。