IMultiInterfaceEventControl
COM公式ドキュメント
イベントをサブスクライバーに発行するオブジェクトであるイベントオブジェクトの動作を制御します。(IMultiInterfaceEventControl)
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
実行時にイベントメソッドにパブリッシャーフィルターを割り当てます。
| classFilter | IMultiInterfacePublisherFilter* | in | 指定したメソッドに関連付けられたパブリッシャーフィルター上の IMultiInterfacePublisherFilter インターフェイスへのポインター。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTED、E_FAIL に加えて、以下の値を返すことがあります。
| リターン コード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| 予期しない例外が発生しました。 | |
| 予期しない内部エラーが検出されました。 |
解説(Remarks)
イベントパブリッシャーは、実行時にパブリッシャーフィルターをインストールすることで、フィルターに指定された条件を満たすサブスクライバーにのみイベントを発行できます。
イベントメソッドに関連付けられたサブスクリプションオブジェクトのコレクションを取得します。
| eventIID | GUID* | in | 発行元インターフェイスのインターフェイス識別子。 |
| bstrMethodName | LPWSTR | in | サブスクリプションコレクションに関連付けられたイベントメソッド。 |
| optionalCriteria | LPWSTR | in | クエリ条件を指定する文字列。このパラメーターが NULL の場合、SetDefaultQuery メソッドで指定された既定のクエリが使用されます。このパラメーターに有効な式を作成する方法の詳細については、後述の「解説」セクションを参照してください。 |
| optionalErrorIndex | INT* | in | optionalCriteria パラメーター内のエラーの位置をオフセットで表したもの。このパラメーターに NULL を指定することはできません。 |
| ppCollection | IEventObjectCollection** | out | イベントオブジェクトに関連付けられたサブスクリプションを列挙するコレクションオブジェクト上の IEventObjectCollection インターフェイスへのポインターのアドレス。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTED、E_FAIL に加えて、以下の値を返すことがあります。
| リターン コード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| クエリ文字列を評価しようとしたときに構文エラーが発生しました。 | |
| クエリ文字列で無効なフィールド名が使用されました。 | |
| 予期しない例外が発生しました。 | |
| 予期しない内部エラーが検出されました。 |
解説(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'"
パブリッシャーフィルターがイベントメソッドに関連付けられていない場合に使用される既定のクエリを設定します。
| eventIID | GUID* | in | 発行元インターフェイスのインターフェイス識別子。 |
| bstrMethodName | LPWSTR | in | 既定のクエリが割り当てられるメソッドの名前。 |
| bstrCriteria | LPWSTR | in | クエリ条件を指定する文字列。このパラメーターに NULL を指定することはできません。このパラメーターに有効な式を作成する方法の詳細については、後述の「解説」セクションを参照してください。 |
| errorIndex | INT* | out | bstrCriteria パラメーター内のエラーの位置をオフセットで表したもの。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTED、E_FAIL に加えて、以下の値を返すことがあります。
| リターン コード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| クエリ文字列を評価しようとしたときに構文エラーが発生しました。 | |
| クエリ文字列で無効なフィールド名が使用されました。 | |
| 予期しない例外が発生しました。 | |
| 予期しない内部エラーが検出されました。 |
解説(Remarks)
このメソッドは、IEventSystem::Query メソッドをより特化させた形式です。サブスクリプションオブジェクトのみを取得するだけでなく、GetSubscriptions を呼び出して取得したコレクションは、サブスクリプションコレクションが変更されるたびに自動的に更新されます。
bstrCriteria パラメーターで指定するクエリ条件には、すべてのサブスクリプションオブジェクトを要求するための "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'"
サブスクライバーをパブリッシャーのプロセス内でアクティブ化できるかどうかを示します。(IMultiInterfaceEventControl.get_AllowInprocActivation)
| pfAllowInprocActivation | BOOL* | out | インプロセスでのアクティブ化を許可するかどうかを受け取る。 |
サブスクライバーをパブリッシャーのプロセス内でアクティブ化できるかどうかを示します。(IMultiInterfaceEventControl.put_AllowInprocActivation)
| fAllowInprocActivation | BOOL | in | インプロセスでのアクティブ化を許可するかどうかを指定する。 |
イベントを2つ以上のサブスクライバーに並列で配信できるかどうかを示します。(Get)
| pfFireInParallel | BOOL* | out | サブスクライバーへのイベント発行を並列で行うかどうかを受け取る。 |
イベントを2つ以上のサブスクライバーに並列で配信できるかどうかを示します。(Put)
| fFireInParallel | BOOL | in | サブスクライバーへのイベント発行を並列で行うかどうかを指定する。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMultiInterfaceEventControl "{0343E2F5-86F6-11D1-B760-00C04FB926AF}" #usecom global IMultiInterfaceEventControl IID_IMultiInterfaceEventControl "{}" #comfunc global IMultiInterfaceEventControl_SetMultiInterfacePublisherFilter 3 sptr #comfunc global IMultiInterfaceEventControl_GetSubscriptions 4 var,wstr,wstr,var,sptr #comfunc global IMultiInterfaceEventControl_SetDefaultQuery 5 var,wstr,wstr,var #comfunc global IMultiInterfaceEventControl_get_AllowInprocActivation 6 var #comfunc global IMultiInterfaceEventControl_put_AllowInprocActivation 7 int #comfunc global IMultiInterfaceEventControl_get_FireInParallel 8 var #comfunc global IMultiInterfaceEventControl_put_FireInParallel 9 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMultiInterfaceEventControl "{0343E2F5-86F6-11D1-B760-00C04FB926AF}" #usecom global IMultiInterfaceEventControl IID_IMultiInterfaceEventControl "{}" #comfunc global IMultiInterfaceEventControl_SetMultiInterfacePublisherFilter 3 sptr #comfunc global IMultiInterfaceEventControl_GetSubscriptions 4 sptr,wstr,wstr,sptr,sptr #comfunc global IMultiInterfaceEventControl_SetDefaultQuery 5 sptr,wstr,wstr,sptr #comfunc global IMultiInterfaceEventControl_get_AllowInprocActivation 6 sptr #comfunc global IMultiInterfaceEventControl_put_AllowInprocActivation 7 int #comfunc global IMultiInterfaceEventControl_get_FireInParallel 8 sptr #comfunc global IMultiInterfaceEventControl_put_FireInParallel 9 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。