次の方法で共有


IMessageFilter インターフェイス (objidl.h)

同期呼び出しからの応答を待機している間に、COM サーバーとアプリケーションで受信および送信 COM メッセージを選択的に処理する機能を提供します。 メッセージをフィルター処理すると、呼び出しがパフォーマンスを向上させ、デッドロックを回避する方法で確実に処理されます。 COM メッセージは、同期、非同期、または入力同期にすることができます。インターフェイス呼び出しの大部分は同期です。

継承

IMessageFilter インターフェイスは、IUnknown インターフェイスから継承されます。 IMessageFilter には、次の種類のメンバーもあります。

メソッド

IMessageFilter インターフェイスには、これらのメソッドがあります。

 
IMessageFilter::HandleInComingCall

着信呼び出し用の 1 つのエントリ ポイントを提供します。
IMessageFilter::MessagePending

COM がリモート呼び出しへの応答を待機している間にメッセージが到着したことを示します。
IMessageFilter::RetryRejectedCall

再試行、キャンセル、またはタスク切り替えオプションを提供するダイアログ ボックスを表示する機会をアプリケーションに提供します。

注釈

同期呼び出しでは、呼び出し元が応答を待ってから続行する必要があります。 COM は、応答の待機中にモーダル ループに入ります。 この間、呼び出し元は引き続き受信メッセージを受信およびディスパッチできます。

非同期呼び出しを使用すると、呼び出し元は呼び出されたオブジェクトからの応答を待たずに続行できます。 現在、COM では、オブジェクトの IAdviseSink インターフェイスに対する非同期呼び出しのみが行われています。 オブジェクトが非同期呼び出しを処理している間は、呼び出し元のオブジェクトに対して同期呼び出しを行うことを禁止します。

フォーカス管理や先行入力などの動作を正しく機能させるために、入力同期呼び出しでは、制御を放棄する前に呼び出しを完了する呼び出しオブジェクトが必要です。

WM_QUERYENDSESSIONとWM_ENDSESSIONを使用したアプリケーションのシャットダウン

ユーザーが Windows を終了すると、開いている各アプリケーションは、 終了 が取り消されない場合、WM_QUERYENDSESSIONメッセージの後に WM_ENDSESSION メッセージを受け取ります。 これらのメッセージは SendMessage 関数を使用して呼び出され、残念ながらすべての発信 LRPC 呼び出しの開始が制限されます。 これは、LRPC がこれらのオブジェクトを閉じる必要があるため、シャットダウン要求を受け取ったときに、開いている埋め込みオブジェクトを持つコンテナー アプリケーションの問題です。

開いているドキュメントを含むコンテナーおよびコンテナー/サーバー アプリケーションでは、通常、ユーザーが終了する前に変更を保存するかどうかを確認する WM_QUERYENDSESSION メッセージの受信時にメッセージ ボックスが表示されます。 通常、肯定的な応答が既定値です。 上記の状況に対処するための推奨事項は、ユーザーが変更を破棄するかどうかを尋ねる代替メッセージ ボックスをアプリケーションに表示することです。負の応答が既定である必要があります。 ユーザーが変更を破棄することを選択した場合は、WM_QUERYENDSESSION対して TRUE が返され、Windows に終了できることを通知します。 ユーザーが変更を破棄しない場合は、 FALSE を 返す必要があります。 実行中の埋め込みを閉じるか解放しようとしないでください。

サーバー アプリケーションは、ユーザーにメッセージを表示せずに、WM_QUERYENDSESSION対して TRUE を返す必要があります。 WM_ENDSESSION メッセージを受信すると、すべての COM アプリケーションは、各アプリケーションのドキュメントとオブジェクトに対して通常のクローズ シーケンスを実行する必要があります。 同時に、プロセス間の呼び出しまたは IUnknown::Release の呼び出しによって発生したエラーは無視する必要があります。 構造化ストレージの複合ファイル実装によって維持される一時ファイルを適切にフラッシュするには、すべてのストレージ ポインター (IStorage および IStream インターフェイス ポインター) を解放する必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー objidl.h