物事を監視する必要があるアウトプロセス COM サーバーがあります。このサーバーはサービスとして実行され、内部的にはシングルトンです。簡単にするために、私は彼を BossCom と呼びます。
ワーカーである別のアウトプロセス COM サーバーがあります。システムの安定性を確保するために、これは使い捨てサーバーです (つまり、2 つの WorkerCom を作成すると、2 つの WorkerCom.exe が実行されます)。簡単にするために、私は彼を WorkerCom と呼びます。
WorkerCom は、誰かが適切なコマンド ライン引数を指定してコマンド ライン経由で実行した場合でも、単独で起動することもできます。
全体的な目標は、BossCom が周りの WorkerCom を把握し、彼らが何をしているかを把握し、彼らに命令 (一時停止、停止、立ち上げなど) を与えることができるようにすることです。
これに関する私の最初の考えは、WorkerCom が起動するたびに、BossCom を CoCreateInstance し、BossCom->RegisterWorker(IUnknown me) を呼び出すだろうというものでした。次に、WorkerCom がシャットダウンしようとしているときに、BossCom->UnregisterWorker(IUnknown me) を呼び出します。BossCom は、IWorkerCom の IUnknown を QueryInterface し、コマンドを発行できる可能性があります。
これらすべての com オブジェクトが同じプロセス内にある場合はうまく機能しますが、そうではありません。GlobalInterfaceTable を使おうと思ったのですが、単一プロセスという意味でグローバルなだけです。
私はこれを調査するのに数日を費やしましたが、途方に暮れています。多分私は視野狭窄です。
Worker から Boss への com オブジェクトへの参照をマーシャリングするにはどうすればよいですか?
ああ、それと、BossCom は C# で書かれており、WorkerCom は ATL C++ で書かれていますが、VB、Scala、Lisp などで書かれたソリューションを使用します。核となるアイデアを翻訳できると思います。:-)