__unhook
イベント ハンドラーからメソッドを分離します。
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 の属性のパラメーターが truelayout_dependent な COM のイベント レシーバーにのみ receiver から外れるインターフェイス名。source
イベント ソース インスタンスへのポインター。event_receiver で指定されたコード type によって ソースは 次のいずれかです :ネイティブ イベント ソース オブジェクトのポインター。
IUnknown の COM ベースのポインター (ソース)。
マネージ オブジェクトのポインター (マネージ イベントの場合)。
ReceiverClass::HandlerMethod
イベント ハンドラー メソッドへのポインター。イベントから外れる。ハンドラーは同じクラスへの参照またはのメソッドとして指定します ; クラス名を指定しない場合**__unhook** はというクラスが entity unhook であると仮定します。ネイティブ C++ のイベント : ReceiverClass は イベント レシーバーのクラスです HandlerMethod はハンドラーです。
COM イベント : ReceiverClass は イベント レシーバーのインターフェイスです HandlerMethod はハンドラーの 1 つです。
マネージ イベント : ReceiverClass は イベント レシーバーのクラスです HandlerMethod はハンドラーです。
receiver(省略可能)
イベント レシーバー クラスのインスタンスへのポインター。レシーバーを指定しない場合既定値は __unhook が構造体またはレシーバー クラスです。
使用方法
すべての関数スコープではイベント レシーバー クラスの外側の関数がもかまいません。
解説
分離するためにイベント レシーバーで組み込み関数 __unhook を使用してイベント ハンドラーからメソッド 「メソッド」をオフにしてください。
__unhook の 3 とおりの形式があります。最初の引数 (4) フォームをほとんどの場合に使用できます。COM イベント レシーバーにのみ __unhook の 2 番目の引数 (2) 形式を使用できます ; これはのイベント インターフェイスを外します。指定したソースからすべてのデリゲートを外すには3 番目の引数 (1) 形式を使用できます。
ゼロ以外の戻り値はエラーが発生したことを示します (マネージ イベントは例外をスローします)。
既に引っ掛からないイベント ハンドラーとイベントの __unhook を呼び出すと効果はありません。
コンパイル時にコンパイラはイベントがあり指定されたハンドラーに確認するパラメーター型を確認します。
COM イベントを除く__hook と __unhook はイベント レシーバーの外部で呼び出すことができます。
__unhook を使用する方法は- = 演算子を使用します。
新しい構文ではコーディングのマネージ イベントの詳細についてはイベント (Visual C++) を参照してください。
[!メモ]
テンプレート クラスまたは構造体にイベントを含めることはできません。
使用例
例についてはネイティブ C++ のイベント処理 と COM のイベント処理 を参照してください。