__hook__hook

ハンドラー メソッドをイベントに関連付けます。Associates a handler method with an event.

構文Syntax

long __hook(
    &SourceClass::EventMethod,
    source,
    &ReceiverClass::HandlerMethod
    [, receiver = this]
);
long __hook(
    interface,
    source
);

パラメーターParameters

& SourceClass::EventMethod&SourceClass::EventMethod
イベント ハンドラー メソッドをフックする先のイベント メソッドへのポインター。A pointer to the event method to which you hook the event handler method:

  • ネイティブ C++ イベント:SourceClassはイベント ソース クラスとEventMethodはイベントです。Native C++ events: SourceClass is the event source class and EventMethod is the event.

  • COM イベント:SourceClassはイベント ソース インターフェイスとEventMethodそのメソッドの 1 つです。COM events: SourceClass is the event source interface and EventMethod is one of its methods.

  • マネージ イベント:SourceClassはイベント ソース クラスとEventMethodはイベントです。Managed events: SourceClass is the event source class and EventMethod is the event.

interfaceinterface
フックされているインターフェイス名受信者である COM イベント レシーバーにのみ、 layout_dependentのパラメーター、 event_receiver属性がtrueします。The interface name being hooked to receiver, only for COM event receivers in which the layout_dependent parameter of the event_receiver attribute is true.

sourcesource
イベント ソースのインスタンスへのポインター。A pointer to an instance of the event source. コードに応じてtypeで指定されているevent_receiverソース次のいずれかを指定できます。Depending on the code type specified in event_receiver, source can be one of the following:

  • ネイティブ イベント ソース オブジェクト ポインター。A native event source object pointer.

  • IUnknown-ベース ポインター (COM ソース)。An IUnknown-based pointer (COM source).

  • マネージド オブジェクトのポインター (マネージド イベントの場合)。A managed object pointer (for managed events).

& ReceiverClass::HandlerMethod&ReceiverClass::HandlerMethod
イベントにフックするイベント ハンドラー メソッドへのポインター。A pointer to the event handler method to be hooked to an event. ハンドラーが同じではへの参照またはクラスのメソッドとして指定します。クラス名を指定しない場合 _ _hookクラスで呼び出されることを前提としています。The handler is specified as a method of a class or a reference to the same; if you do not specify the class name, __hook assumes the class to be that in which it is called.

  • ネイティブ C++ イベント:ReceiverClassはイベント レシーバー クラスとHandlerMethodはハンドラーです。Native C++ events: ReceiverClass is the event receiver class and HandlerMethod is the handler.

  • COM イベント:ReceiverClassはイベント レシーバー インターフェイスとHandlerMethodそのハンドラーの 1 つです。COM events: ReceiverClass is the event receiver interface and HandlerMethod is one of its handlers.

  • マネージ イベント:ReceiverClassはイベント レシーバー クラスとHandlerMethodはハンドラーです。Managed events: ReceiverClass is the event receiver class and HandlerMethod is the handler.

受信側receiver
(省略可能)イベント レシーバー クラスのインスタンスへのポインター。(Optional) A pointer to an instance of the event receiver class. 受信側を指定しない場合、既定はレシーバー クラスまたは構造体です _ _hookが呼び出されます。If you do not specify a receiver, the default is the receiver class or structure in which __hook is called.

使用法Usage

イベント レシーバー クラス外の main を含む、任意の関数スコープで使用できます。Can be use in any function scope, including main, outside the event receiver class.

RemarksRemarks

組み込み関数を使用して _ _hook関連付けるかフックをイベント メソッドのハンドラー メソッドに、イベント レシーバー内で。Use the intrinsic function __hook in an event receiver to associate or hook a handler method with an event method. ソースで指定されたイベントが発生すると、指定されたハンドラーが呼び出されます。The specified handler is then called when the source raises the specified event. 複数のイベント ハンドラーを 1 つのイベントに、または複数のイベントを 1 つのイベント ハンドラーにフックすることができます。You can hook several handlers to a single event or hook several events to a single handler.

2 つの形式がある _ _hookします。There are two forms of __hook. ある COM イベント レシーバーを具体的には、ほとんどの場合、最初 (引数が 4 つ) の形式を使用することができます、 layout_dependentのパラメーター、 event_receiver属性がfalse.You can use the first (four-argument) form in most cases, specifically, for COM event receivers in which the layout_dependent parameter of the event_receiver attribute is false.

このような場合、メソッドの 1 つでイベントを発生させる前に、インターフェイスのすべてのメソッドをフックする必要はありません。イベントを処理するメソッドのみフックする必要があります。In these cases you do not need to hook all methods in an interface before firing an event on one of the methods; only the method handling the event needs to be hooked. 2 番目 (引数が 2 つ) の形式を使用する _ _hookを COM イベント レシーバーにのみlayout_dependent = trueします。You can use the second (two-argument) form of __hook only for a COM event receiver in which layout_dependent = true.

_ _hook long 型の値を返します。__hook returns a long value. ゼロ以外の戻り値は、エラーが発生したことを示します (マネージド イベントは例外をスローします)。A nonzero return value indicates that an error has occurred (managed events throw an exception).

コンパイラは、イベントが存在するかどうかをチェックし、イベント プロシージャがデリゲート シグネチャと一致することを確認します。The compiler checks for the existence of an event and that the event signature agrees with the delegate signature.

COM イベントを除き、 _ _hook_ _unhookイベント レシーバーの外部で呼び出すことができます。With the exception of COM events, __hook and __unhook can be called outside the event receiver.

使用する代わりに _ _hook + = 演算子を使用することです。An alternative to using __hook is to use the += operator.

新しい構文でマネージ イベントのコーディングについては、次を参照してください。イベントします。For information on coding managed events in the new syntax, see event.

注意

テンプレート クラスまたは構造体にイベントを含めることはできません。A templated class or struct cannot contain events.

Example

参照してくださいネイティブ C++ でのイベント処理COM でのイベント処理サンプル。See Event Handling in Native C++ and Event Handling in COM for samples.

関連項目See also

キーワードKeywords
イベント処理Event Handling
event_sourceevent_source
event_receiverevent_receiver
__unhook__unhook
__raise__raise