Win32 API 日本語リファレンス
ホームSystem.Com.Events › IPublisherFilter

IPublisherFilter

COM
IID465e5cc0-7b26-11d1-88fb-0080c7d771bf継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

イベントパブリッシャーが、どのサブスクライバーがイベント通知を受け取るか、またはサブスクライバーに通知される順序を制御できるようにするためのコールバックインターフェイスとして機能します。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Initialize(LPWSTR methodName, IDispatch* dispUserDefined)

イベントメソッドをサブスクリプションオブジェクトのコレクションに関連付けます。

methodNameLPWSTRinパブリッシャーフィルターに関連付けられたイベントメソッドの名前。
dispUserDefinedIDispatch*inイベントシステムオブジェクト上の IEventSystem インターフェイス、またはイベントクラスオブジェクト上の IEventControl インターフェイスへのポインター。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_UNEXPECTEDE_FAIL のほか、次の値を返すことがあります。

戻り値 説明
S_OK
パブリッシャーフィルターが正常に初期化されました。
EVENT_S_SOME_SUBSCRIBERS_FAILED
イベントは一部のサブスクライバーを呼び出せましたが、すべては呼び出せませんでした。
EVENT_E_ALL_SUBSCRIBERS_FAILED
イベントはいずれのサブスクライバーも呼び出せませんでした。
EVENT_S_NOSUBSCRIBERS
イベントは発行されましたが、サブスクライバーが存在しませんでした。
EVENT_E_QUERYSYNTAX
クエリ文字列を評価しようとした際に構文エラーが発生しました。
EVENT_E_QUERYFIELD
クエリ文字列で無効なフィールド名が使用されました。
EVENT_E_INTERNALEXCEPTION
予期しない例外が発生しました。
EVENT_E_INTERNALERROR
予期しない内部エラーが検出されました。
EVENT_E_INVALID_PER_USER_SID
ユーザーごとのサブスクリプションの所有者 SID が存在しません。
EVENT_E_USER_EXCEPTION
ユーザー提供のコンポーネントまたはサブスクライバーが例外を発生させました。
EVENT_E_TOO_MANY_METHODS
インターフェイスに、イベントを発生させるメソッドが多すぎます。
EVENT_E_MISSING_EVENTCLASS
サブスクリプションのイベントクラスが既に存在していない限り、そのサブスクリプションを保存することはできません。
EVENT_E_NOT_ALL_REMOVED
要求されたオブジェクトのすべてを削除できたわけではありません。
EVENT_E_COMPLUS_NOT_INSTALLED
この操作には COM+ が必要ですが、インストールされていません。

解説(Remarks)

パブリッシャーフィルターは、dispUserDefined に渡されたポインターを使用して、IEventSystem::Query または IEventControl::GetSubscriptions を呼び出すことで、サブスクライバーの一覧を取得します。

vtbl 4 HRESULT PrepareToFire(LPWSTR methodName, IFiringControl* firingControl)

指定された発生制御 (firing control) を使用して、フィルター処理されたサブスクリプションの一覧の発生を開始できるように、パブリッシャーフィルターを準備します。発生制御はイベントクラスオブジェクトに含まれています。

methodNameLPWSTRin発生させるイベントメソッドの名前。
firingControlIFiringControl*in発生制御オブジェクト上の IFiringControl インターフェイスへのポインター。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_UNEXPECTEDE_FAIL のほか、次の値を返すことがあります。

戻り値 説明
S_OK
イベントクラスオブジェクトはイベントを発生させる準備ができています。
EVENT_S_SOME_SUBSCRIBERS_FAILED
イベントは一部のサブスクライバーを呼び出せましたが、すべては呼び出せませんでした。
EVENT_E_ALL_SUBSCRIBERS_FAILED
イベントはいずれのサブスクライバーも呼び出せませんでした。
EVENT_S_NOSUBSCRIBERS
イベントは発行されましたが、サブスクライバーが存在しませんでした。
EVENT_E_QUERYSYNTAX
クエリ文字列を評価しようとした際に構文エラーが発生しました。
EVENT_E_QUERYFIELD
クエリ文字列で無効なフィールド名が使用されました。
EVENT_E_INTERNALEXCEPTION
予期しない例外が発生しました。
EVENT_E_INTERNALERROR
予期しない内部エラーが検出されました。
EVENT_E_INVALID_PER_USER_SID
ユーザーごとのサブスクリプションの所有者 SID が存在しません。
EVENT_E_USER_EXCEPTION
ユーザー提供のコンポーネントまたはサブスクライバーが例外を発生させました。
EVENT_E_TOO_MANY_METHODS
インターフェイスに、イベントを発生させるメソッドが多すぎます。
EVENT_E_MISSING_EVENTCLASS
サブスクリプションのイベントクラスが既に存在していない限り、そのサブスクリプションを保存することはできません。
EVENT_E_NOT_ALL_REMOVED
要求されたオブジェクトのすべてを削除できたわけではありません。
EVENT_E_COMPLUS_NOT_INSTALLED
この操作には COM+ が必要ですが、インストールされていません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。