COM サーバー (C++/STA (MFC ベースのアプリ)) と COM クライアント (C#/MTA) があります。COM サーバーは MFC アプリであるため、STA 内に存在する必要があります (この件については選択の余地がありません)。クライアントはサーバーに呼び出しを発行し、サーバーはクライアントにコールバックを発行します。ここでエラーが発生します ( RPC_E_CANTCALLOUT_ININPUTSYNCCALL
)。サーバーが MTA であった場合、この問題は発生しなかったと思いますが、残念ながら、MFC のドキュメントではアパートメントを MTA として初期化することを明示的に否定しています。
この問題を回避する方法についてのアイデアはありますか?
サーバー オブジェクト (実行中のオブジェクト テーブルを介して公開するオブジェクト) を独自のアパートメント (MTA) に配置するというアイデアをいじっています。これは良い考えでしょうか、それとも最初に試すのに簡単なものはありますか?
アップデート
サーバー オブジェクトは、アプリケーション内の特定の機能を指すシン インターフェイスにすぎません。ほとんどの場合、メモリ ロケーションの読み取りと書き込みを行うだけですが、アプリケーション内のさまざまなウィンドウにウィンドウ メッセージを生成する場合があります。サーバー オブジェクト自体はアプリケーション全体ではありません。