次の方法で共有


__hook

イベント ハンドラーにメソッドを関連付けます。

long __hook(
   &SourceClass::EventMethod,
   source,
   &ReceiverClass::HandlerMethod
   [, receiver = this]
);
long __hook(
   interface,
   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
    イベント ハンドラー メソッドへのポインター。イベントにフックする。ハンドラーは同じクラスへの参照またはのメソッドとして指定します ; クラス名を指定しない場合__hook はというクラスが entity hook であると仮定します。

    • ネイティブ C++ のイベント : ReceiverClass は イベント レシーバーのクラスです HandlerMethod はハンドラーです。

    • COM イベント : ReceiverClass は イベント レシーバーのインターフェイスです HandlerMethod はハンドラーの 1 つです。

    • マネージ イベント : ReceiverClass は イベント レシーバーのクラスです HandlerMethod はハンドラーです。

  • receiver(省略可能)
    イベント レシーバー クラスのインスタンスへのポインター。レシーバーを指定しない場合既定値は __hook が構造体またはレシーバー クラスです。

使用方法

すべての関数スコープではイベント レシーバー クラスの外側の関数がもかまいません。

解説

イベント ハンドラー メソッドとメソッドを関連付けたりコードにフック イベント レシーバーで組み込み関数 __hook を使用します。指定されたハンドラーはソースが特定のイベントが発生したときに呼び出されます。一つのイベントに複数ハンドラーをフックするかまたは一つハンドラーに複数のイベントをフックすることができます。

__hook の 2 とおりの形式があります。event_receiver の属性のパラメーターが Falselayout_dependent な COM のイベント レシーバーの場合ほとんどの場合最初の引数 (4)フォームは使用できます。

このような場合メソッドが 1 回でイベントを発生させる前にすべてのインターフェイスのメソッドをフックする必要はありません ; イベントを処理するメソッドのみをフックする必要があります。layout_dependent**=true**COM イベント レシーバーにのみ __hook の 2 番目の引数 (2) 形式を使用できます。

__hook は長い値を返します。ゼロ以外の戻り値はエラーが発生したことを示します (マネージ イベントは例外をスローします)。

コンパイラはイベントの存在をチェックしイベントのシグネチャはデリゲート シグネチャと一致します。

COM イベントを除く__hook と __unhook はイベント レシーバーの外部で呼び出すことができます。

__hook を使用する代わりに+= 演算子を使用します。

新しい構文ではコーディングのマネージ イベントの詳細についてはイベント (Visual C++) を参照してください。

[!メモ]

テンプレート クラスまたは構造体にイベントを含めることはできません。

使用例

例についてはネイティブ C++ のイベント処理COM のイベント処理 を参照してください。

参照

関連項目

C++ のキーワード

イベント処理

event_source

event_receiver

__unhook

__raise