ホーム › System.Com.Events › IPublisherFilter
IPublisherFilter
COM公式ドキュメント
イベントパブリッシャーが、どのサブスクライバーがイベント通知を受け取るか、またはサブスクライバーに通知される順序を制御できるようにするためのコールバックインターフェイスとして機能します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
イベントメソッドをサブスクリプションオブジェクトのコレクションに関連付けます。
| methodName | LPWSTR | in | パブリッシャーフィルターに関連付けられたイベントメソッドの名前。 |
| dispUserDefined | IDispatch* | in | イベントシステムオブジェクト上の IEventSystem インターフェイス、またはイベントクラスオブジェクト上の IEventControl インターフェイスへのポインター。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTED、E_FAIL のほか、次の値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| パブリッシャーフィルターが正常に初期化されました。 | |
| イベントは一部のサブスクライバーを呼び出せましたが、すべては呼び出せませんでした。 | |
| イベントはいずれのサブスクライバーも呼び出せませんでした。 | |
| イベントは発行されましたが、サブスクライバーが存在しませんでした。 | |
| クエリ文字列を評価しようとした際に構文エラーが発生しました。 | |
| クエリ文字列で無効なフィールド名が使用されました。 | |
| 予期しない例外が発生しました。 | |
| 予期しない内部エラーが検出されました。 | |
| ユーザーごとのサブスクリプションの所有者 SID が存在しません。 | |
| ユーザー提供のコンポーネントまたはサブスクライバーが例外を発生させました。 | |
| インターフェイスに、イベントを発生させるメソッドが多すぎます。 | |
| サブスクリプションのイベントクラスが既に存在していない限り、そのサブスクリプションを保存することはできません。 | |
| 要求されたオブジェクトのすべてを削除できたわけではありません。 | |
| この操作には COM+ が必要ですが、インストールされていません。 |
解説(Remarks)
パブリッシャーフィルターは、dispUserDefined に渡されたポインターを使用して、IEventSystem::Query または IEventControl::GetSubscriptions を呼び出すことで、サブスクライバーの一覧を取得します。
vtbl 4 HRESULT PrepareToFire(LPWSTR methodName, IFiringControl* firingControl)
指定された発生制御 (firing control) を使用して、フィルター処理されたサブスクリプションの一覧の発生を開始できるように、パブリッシャーフィルターを準備します。発生制御はイベントクラスオブジェクトに含まれています。
| methodName | LPWSTR | in | 発生させるイベントメソッドの名前。 |
| firingControl | IFiringControl* | in | 発生制御オブジェクト上の IFiringControl インターフェイスへのポインター。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTED、E_FAIL のほか、次の値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| イベントクラスオブジェクトはイベントを発生させる準備ができています。 | |
| イベントは一部のサブスクライバーを呼び出せましたが、すべては呼び出せませんでした。 | |
| イベントはいずれのサブスクライバーも呼び出せませんでした。 | |
| イベントは発行されましたが、サブスクライバーが存在しませんでした。 | |
| クエリ文字列を評価しようとした際に構文エラーが発生しました。 | |
| クエリ文字列で無効なフィールド名が使用されました。 | |
| 予期しない例外が発生しました。 | |
| 予期しない内部エラーが検出されました。 | |
| ユーザーごとのサブスクリプションの所有者 SID が存在しません。 | |
| ユーザー提供のコンポーネントまたはサブスクライバーが例外を発生させました。 | |
| インターフェイスに、イベントを発生させるメソッドが多すぎます。 | |
| サブスクリプションのイベントクラスが既に存在していない限り、そのサブスクリプションを保存することはできません。 | |
| 要求されたオブジェクトのすべてを削除できたわけではありません。 | |
| この操作には COM+ が必要ですが、インストールされていません。 |
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPublisherFilter "{465E5CC0-7B26-11D1-88FB-0080C7D771BF}"
#usecom global IPublisherFilter IID_IPublisherFilter "{}"
#comfunc global IPublisherFilter_Initialize 3 wstr,sptr
#comfunc global IPublisherFilter_PrepareToFire 4 wstr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。