次のような状況があります。
コネクション ポイントを持つ COM オブジェクトをホストする ATL COM サーバー (アウト オブ プロセス、EXE)。これらのオブジェクトは、単一の (exe) プロセスの「内部に存在」し、(Fire_* メソッドを使用して) イベントを発生させるため、他のプロセス (たとえば、別のプロセス内の .NET GUI アプリケーション、ATL EXE サーバーの「クライアント」) ) は、これらのイベントをキャッチし、それに応じて対応できます。
現在、ATL サーバーのクライアントである .NET アプリケーション (Windows フォーム) があります。開始 (ダブルクリック) すると、ATL サーバーでホストされている COM オブジェクト イベント (接続ポイント) にいくつかのデリゲート (イベント ハンドラー) がアタッチされます。ATL サーバーからイベントが発生するたびに、.NET クライアントは通常、メイン ウィンドウに何らかの情報を表示するか、ユーザーが操作できるように新しいウィンドウを開きます。このソリューションは、次の記事に基づいています: http://www.codeproject.com/KB/COM/cominterop.aspx#ConnectionPoints (COM-.NET イベント処理)。
上記のシナリオは、ユーザーがイベントの発生前に .NET クライアント (exe) を実際にダブルクリックしたこと、つまり、.NET アプリケーションを明示的に開いたことを前提としています。.NET クライアントが開かれていない (インスタンス化されていない) 場合、発生したイベントは「失われます」 - どのクライアントもそれを処理しません。
次の状況が必要です。
ATL サーバーからイベントが発生すると、ウィンドウがすぐに表示 (ポップアップ) され、.NET を起動する必要なく、ユーザーが操作できるようになります (たとえば、電子メールのテキスト ボックスに入力して [OK] を押す)。すべての前に明示的にクライアント。このようにして、ユーザーは各イベントについて通知され、インタラクティブに反応することができます。
.NET クライアント アプリを ATL サーバー内の dll としてホストするオプションを検討しましたが、ATL EXE から GUI を表示することは大きな "NO-NO" であると読みました (.NET GUI だけでなく、任意の GUI WinForms または WPF)。
サーバーとクライアントが2つの異なるプロセスで実行されている場合(および「クライアント」がまだ実行されていない場合)、これは可能ですか? 誰かが同じ問題に遭遇しましたか?それは解決されましたか(そしてどのように...)?
ありがとう ;-)
オムリ
これに対する解決策はありますか?