4

これは私の別のQのバリエーションです。XとYの2つのアプリケーションがあります。これらは、それらの間で1つのCOMオブジェクトを共有する必要があります。Xはこのオブジェクトにデータを送信し、Yはこのアプリケーションから送信されたイベントに応答します。いつでもXまたはYが終了する可能性がありますが、両方のアプリケーションが終了するまでシングルトンは存続する必要があります。
この方法でシングルトンCOMオブジェクトを作成することは可能ですが、Xが最初に起動して作成すると、Yが起動して使用し、Xが停止して...シングルトンはどうなりますか?
とにかく、誰かがDelphiでこれを試したことがありますか?

4

1 に答える 1

6

COMの要点が欠けていると思います。COM は、一般的な IPC からのステップ オペレーションにすぎません。つまり、COM プロセスは 1 つのプロセス (またはスレッドでさえ、ただし、アパートメント ストーリーの出番です) にのみ存在します。2 つのプロセスから 1 つの COM オブジェクトにアクセスする場合、実際には、一方のプロセスがオブジェクトとの間の呼び出しを「フラット データ」にマーシャリングし、非表示のウィンドウ ハンドルにメッセージを他方のプロセスにポストします。

あなたが説明したことを実行できるようにするには、「所有しているプロセス」がシャットダウンしたいときにオブジェクトをどうするかを心配する必要があり、オブジェクトを「一時停止」し(シリアル化などによって)、他のプロセスのいずれかに問い合わせる必要がありますオブジェクトを「再開」して所有権を引き継ぎ、オブジェクトの実行を開始します。

特に、他のプロセスで使用したいこのシングルトン オブジェクトのみを実行するために、3 番目のプロセスを作成することをお勧めします。このようにして、通常の参照カウントと COM のアクティブ化を行うことができ、本来の動作方法で COM を使用することができます。

于 2010-11-04T21:24:38.233 に答える