__unhook
キーワード
イベントからハンドラー メソッドの関連付けを解除します。
Note
ネイティブ C++ のイベント属性は、標準 C++ と互換性がありません。 この属性は、/permissive-
準拠モードを指定するとコンパイルされません。
構文
long __unhook(
&SourceClass::EventMethod,
source,
&ReceiverClass::HandlerMethod
[, receiver = this]
);
long __unhook(
interface,
source
);
long __unhook(
source
);
パラメーター
&SourceClass::EventMethod
イベント ハンドラー メソッドのフックを解除するイベント メソッドへのポインター。
ネイティブ C++ イベント:
SourceClass
はイベント ソース クラスであり、EventMethod
はイベントです。COM イベント:
SourceClass
はイベント ソース インターフェイスであり、EventMethod
はメソッドの 1 つです。マネージド イベント:
SourceClass
はイベント ソース クラスであり、EventMethod
はイベントです。
interface
event_receiver
属性の layout_dependent パラメーターが true
である COM イベント レシーバーのみに対して、レシーバーからアンフックされるインターフェイス名。
source
イベント ソースのインスタンスへのポインター。 event_receiver
で指定されているコード type
に応じて、以下のいずれかの種類のソースになります。
ネイティブ イベント ソース オブジェクト ポインター。
IUnknown
ベースのポインター (COM ソース)。マネージド オブジェクトのポインター (マネージド イベントの場合)。
&ReceiverClass::HandlerMethod
イベントからアンフックするイベント ハンドラー メソッドへのポインター。 ハンドラーは、クラスのメソッドまたはそれへの参照として指定されます。ユーザーがクラス名を指定しない場合、__unhook
は、それを呼び出したクラスを使用します。
ネイティブ C++ イベント:
ReceiverClass
はイベント レシーバー クラスであり、HandlerMethod
はハンドラーです。COM イベント:
ReceiverClass
はイベント レシーバー インターフェイスであり、HandlerMethod
はハンドラーの 1 つです。マネージド イベント:
ReceiverClass
はイベント レシーバー クラスであり、HandlerMethod
はハンドラーです。
receiver
(省略可能) イベント レシーバー クラスのインスタンスへのポインター。 レシーバーを指定しない場合、既定値は __unhook
が呼び出されるレシーバー クラスまたは構造体です。
使用法
イベント レシーバー クラス外の main
を含む、任意の関数スコープで使用できます。
解説
ハンドラー メソッドとイベント メソッドとの関連付けを解除、つまり "アンフック" するには、イベント レシーバー内で組み込み関数 __unhook
を使用します。
__unhook
には 3 つの形式があります。 ほとんどの場合、最初の形式 (引数が 4 つ) を使用できます。 __unhook
の 2 番目 (引数が 2 つ) の形式は、COM イベント レシーバーにのみ使用でき、イベント インターフェイス全体がアンフックされます。 3 番目 (引数が 1 つ) の形式は、指定したソースからすべてのデリゲートをアンフックする場合に使用します。
ゼロ以外の戻り値は、エラーが発生したことを示します (マネージド イベントは例外をスローします)。
フックされていないイベントやイベント ハンドラーに対して __unhook
を呼び出した場合、効果はありません。
コンパイル時に、コンパイラはイベントが存在することを確認し、指定されたハンドラーを使用してパラメーターの型チェックを実行します。
COM イベントの場合を除き、__hook
と __unhook
は、イベント レシーバーの外部で呼び出すことができます。
__unhook
の使用の代替手段は、-= 演算子を使用することです。
新しい構文でのマネージド イベントのコーディングの詳細については、イベント に関する記事を参照してください。
Note
テンプレート クラスまたは構造体に events を含めることはできません。
例
サンプルについては、「ネイティブ C++ でのイベント処理」と「COM でのイベント処理」を参照してください。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示