__hookSchlüsselwort (keyword)

Ordnet eine Handlermethode einem Ereignis zu.

Hinweis

Ereignisattribute in systemeigenem C++ sind mit Standard C++ nicht kompatibel. Sie werden nicht kompiliert, wenn Sie den Konformitätsmodus angeben /permissive- .

Syntax

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

long __hook(
    interface,
    source
);

Parameter

&SourceClass::EventMethod
Ein Zeiger auf die Ereignismethode, an die Sie die Ereignishandlermethode binden:

  • Systemeigene C++-Ereignisse: SourceClass ist die Ereignisquellklasse und EventMethod das Ereignis.

  • COM-Ereignisse: SourceClass ist die Ereignisquellschnittstelle und EventMethod eine seiner Methoden.

  • Verwaltete Ereignisse: SourceClass ist die Ereignisquellklasse und EventMethod ist das Ereignis.

interface
Der Schnittstellenname, mit receiverdem eine Verbindung besteht, gilt nur für COM-Ereignisempfänger, in denen der layout_dependent Parameter des event_receiver Attributs lautet true.

source
Ein Zeiger auf eine Instanz der Ereignisquelle. Je nach code, der type in event_receiverangegeben ist, source kann es sich um einen der folgenden Typen handeln:

  • Ein systemeigener Ereignisquellen-Objektzeiger.

  • Ein IUnknown-basierter Zeiger (COM-Quelle).

  • Ein Zeiger des verwalteten Objekts (für verwaltete Ereignisse).

&ReceiverClass::HandlerMethod
Ein Zeiger, der an die Ereignishandlermethode gebunden werden soll. Der Handler wird als Methode einer Klasse oder als Verweis auf dasselbe angegeben. Wenn Sie den Klassennamen nicht angeben, wird davon ausgegangen, __hook dass es sich bei der Klasse um die Klasse handelt, von der sie aufgerufen wird.

  • Systemeigene C++-Ereignisse: ReceiverClass ist die Ereignisempfängerklasse und HandlerMethod ist der Handler.

  • COM-Ereignisse: ReceiverClass ist die Ereignisempfängerschnittstelle und HandlerMethod gehört zu den Handlern.

  • Verwaltete Ereignisse: ReceiverClass ist die Ereignisempfängerklasse und HandlerMethod ist der Handler.

receiver
(Optional) Ein Zeiger auf eine Instanz der Ereignisempfängerklasse. Wenn Sie keinen Empfänger angeben, ist der Standardwert die Empfängerklasse oder -struktur, in der __hook sie aufgerufen wird.

Verwendung

Kann in jedem Gültigkeitsbereich der Funktion verwendet werden, einschließlich Main, außerhalb der Ereignisempfängerklasse.

Hinweise

Verwenden Sie die systeminterne Funktion __hook in einem Ereignisempfänger, um eine Handlermethode einer Ereignismethode zuzuordnen oder zu verknüpfen. Der angegebene Handler wird aufgerufen, wenn die Quelle das angegebene Ereignis auslöst. Sie können mehrere Handler an ein einzelnes Ereignis binden oder mehrere Ereignisse an einen einzigen Handler.

Es gibt zwei Formen von __hook. Sie können das erste Formular (vier-Argument) in den meisten Fällen speziell für COM-Ereignisempfänger verwenden, in denen der layout_dependent-Parameter des event_receiver Attributs ist false.

In diesen Fällen müssen Sie nicht alle Methoden in einer Schnittstelle verbinden, bevor Sie ein Ereignis auf eine der Methoden auslösen. Sie müssen nur die Methode zum Behandeln des Ereignisses verbinden. Sie können die zweite Form __hook (zwei-Argument) nur für einen COM-Ereignisempfänger verwenden, in dem layout_dependent= true.

__hook gibt einen langen Wert zurück. Ein Wert ungleich null gibt an, dass ein Fehler aufgetreten ist (verwaltete Ereignisse lösen eine Ausnahme aus).

Der Compiler überprüft, ob ein Ereignis vorhanden ist und ob die Ereignissignatur der Delegatsignatur entspricht.

Mit Ausnahme von COM-Ereignissen können Sie den Ereignisempfänger und __unhook außerhalb des Ereignisempfängers aufrufen__hook.

Eine Alternative zur Verwendung __hook besteht darin, den Operator += zu verwenden.

Informationen zum Codieren verwalteter Ereignisse in der neuen Syntax finden Sie unter event.

Hinweis

Eine von einer Vorlage gebildete Klasse oder Struktur kann keine Ereignisse enthalten.

Beispiel

Beispiele finden Sie in der Ereignisbehandlung in systemeigenen C++ - und Ereignisbehandlungen in COM .

Siehe auch

Schlüsselwörter
Behandlung von Ereignissen
event_source
event_receiver
__event
__unhook
__raise