IEventControl
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
イベントをサブスクライバーに発行するオブジェクトであるイベントオブジェクトの動作を制御します。(IEventControl)
メソッド 5
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
イベントメソッドにパブリッシャーフィルターを割り当てます。
| methodName | LPWSTR | in | 割り当てるパブリッシャーフィルターに関連付けられているイベントメソッドの名前。 |
| pPublisherFilter | IPublisherFilter* | in | 指定したメソッドに関連付けられているパブリッシャーフィルター上の IPublisherFilter インターフェイスへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
イベントパブリッシャーは、実行時にパブリッシャーフィルターをインストールすることで、フィルターで指定された条件を満たすサブスクライバーにのみイベントを発行できます。
サブスクライバーをパブリッシャーのプロセス内でアクティブ化できるかどうかを示します。(IEventControl.get_AllowInprocActivation)
| pfAllowInprocActivation | BOOL* | out | インプロセスでのアクティブ化を許可するかどうかを受け取る。 |
サブスクライバーをパブリッシャーのプロセス内でアクティブ化できるかどうかを示します。(IEventControl.put_AllowInprocActivation)
| fAllowInprocActivation | BOOL | in | インプロセスでのアクティブ化を許可するかどうかを指定する。 |
イベントメソッドに関連付けられているサブスクリプションのコレクションを取得します。
| methodName | LPWSTR | in | サブスクリプションコレクションに関連付けられているイベントメソッド。 |
| optionalCriteria | LPWSTR | in | クエリの条件。このパラメーターが NULL の場合は、SetDefaultQuery メソッドで指定された既定のクエリが使用されます。このパラメーターに有効な式を作成する方法の詳細については、以下の「解説」セクションを参照してください。 |
| optionalErrorIndex | INT* | in | OptionalCriteria パラメーター内のエラーの位置をオフセットとして表したもの。このパラメーターに NULL を指定することはできません。 |
| ppCollection | IEventObjectCollection** | out | イベントオブジェクトに関連付けられているサブスクリプションを列挙するコレクションオブジェクト上の IEventObjectCollection インターフェイスへのポインターのアドレス。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、IEventSystem::Query メソッドをより特化させた形式です。サブスクリプションオブジェクトのみを取得することに加えて、GetSubscriptions を呼び出して取得したコレクションは、サブスクリプションコレクションが変更されるたびに自動的に更新されます。
optionalCriteria パラメーターで指定するクエリの条件には、すべてのサブスクリプションオブジェクトを要求する "ALL"、または、クエリ結果に含めるためにサブスクリプションオブジェクトが満たす必要のある 1 つ以上の条件を表すブール式を指定できます。有効な式は次の形式です。
[NOT] propertynamerelationalOperatorvalue。有効な関係演算子は次のとおりです。
==, =, !=, <>, ~=。有効な値は "string"、'string'、{GUID}、TRUE、FALSE、NULL です。
個々のブール式は AND または OR で結合できます。式を括弧で入れ子にして、特定の評価順序を強制することもできます。
有効なクエリ条件の例を次に示します。
"EventClassID == {F89859D1-6565-11D1-88C8-0080C7D771BF}"
"EventClassID == {F89859D1-6565-11D1-88C8-0080C7D771BF} AND MethodName = 'StockPriceChange'"
サブスクライバーを決定する既定のクエリを設定します。
| methodName | LPWSTR | in | 既定のクエリを割り当てるメソッドの名前。 |
| criteria | LPWSTR | in | クエリの条件。このパラメーターに NULL を指定することはできません。このパラメーターに有効な式を作成する方法の詳細については、以下の「解説」セクションを参照してください。 |
| errorIndex | INT* | out | criteria パラメーター内のエラーの位置をオフセットとして表したもの。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
criteria パラメーターで指定するクエリの条件には、すべてのサブスクリプションオブジェクトを要求する "ALL"、または、クエリ結果に含めるためにサブスクリプションオブジェクトが満たす必要のある 1 つ以上の条件を表すブール式を指定できます。有効な式は次の形式です。
[NOT] propertynamerelationalOperatorvalue。有効な関係演算子は次のとおりです。
==, =, !=, <>, ~=。有効な値は "string"、'string'、{GUID}、TRUE、FALSE、NULL です。
個々のブール式は AND または OR で結合できます。式を括弧で入れ子にして、特定の評価順序を強制することもできます。
有効なクエリ条件の例を次に示します。
"EventClassID == {F89859D1-6565-11D1-88C8-0080C7D771BF}"
"EventClassID == {F89859D1-6565-11D1-88C8-0080C7D771BF} AND MethodName = 'StockPriceChange'"
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IEventControl "{0343E2F4-86F6-11D1-B760-00C04FB926AF}" #usecom global IEventControl IID_IEventControl "{}" #comfunc global IEventControl_SetPublisherFilter 7 wstr,sptr #comfunc global IEventControl_get_AllowInprocActivation 8 var #comfunc global IEventControl_put_AllowInprocActivation 9 int #comfunc global IEventControl_GetSubscriptions 10 wstr,wstr,var,sptr #comfunc global IEventControl_SetDefaultQuery 11 wstr,wstr,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IEventControl "{0343E2F4-86F6-11D1-B760-00C04FB926AF}" #usecom global IEventControl IID_IEventControl "{}" #comfunc global IEventControl_SetPublisherFilter 7 wstr,sptr #comfunc global IEventControl_get_AllowInprocActivation 8 sptr #comfunc global IEventControl_put_AllowInprocActivation 9 int #comfunc global IEventControl_GetSubscriptions 10 wstr,wstr,sptr,sptr #comfunc global IEventControl_SetDefaultQuery 11 wstr,wstr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。