__unhookSchlüsselwort (keyword)

Entfernt die Zuordnung einer Handlermethode von einem Ereignis.

Hinweis

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

Syntax

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

long  __unhook(
   interface,
   source
);

long  __unhook(
   source
);

Parameter

&SourceClass::EventMethod
Ein Zeiger auf die Ereignismethode, von der Sie die Ereignishandlermethode aufheben:

  • 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, der vom Empfänger getrennt wird, 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. Abhängig vom in event_receiverder Datei angegebenen Code type kann die Quelle einen der folgenden Typen sein:

  • Ein systemeigener Ereignisquellen-Objektzeiger.

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

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

&ReceiverClass::HandlerMethod Ein Zeiger auf die Ereignishandlermethode, die von einem Ereignis getrennt werden soll. Der Handler wird als Methode einer Klasse oder als Verweis auf dasselbe angegeben. wenn Sie den Klassennamen nicht angeben, wird davon ausgegangen, __unhook dass die Klasse die Klasse ist, in 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 __unhook sie aufgerufen wird.

Verwendung

Kann in jedem Funktionsbereich verwendet werden, einschließlich main, außerhalb der Ereignisempfängerklasse.

Hinweise

Verwenden Sie die systeminterne Funktion __unhook in einem Ereignisempfänger, um die Zuordnung oder den "Unhook" einer Handlermethode von einer Ereignismethode zu trennen.

Es gibt drei Formen von __unhook. Sie können in den meisten Fällen das erste (four-argument) Formular verwenden. Sie können die zweite Form __unhook (zwei-Argument) nur für einen COM-Ereignisempfänger verwenden. Sie enthookst die gesamte Ereignisschnittstelle. Sie können das dritte (one-argument) Formular verwenden, um bei allen Delegaten aus der angegebenen Quelle die Bindung zu lösen.

Ein Wert ungleich null gibt an, dass ein Fehler aufgetreten ist (verwaltete Ereignisse lösen eine Ausnahme aus).

Wenn Sie einen Ereignis- und Ereignishandler aufrufen __unhook , der noch nicht eingebunden ist, hat er keine Auswirkung.

Zur Kompilierzeit überprüft der Compiler, dass das Ereignis vorhanden ist und führt eine Parametertypüberprüfung mit dem angegebenen Handler aus.

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

Eine Alternative zur Verwendung __unhook 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 unter "Ereignisbehandlung" in systemeigenem C++ und der Ereignisbehandlung in COM .

Siehe auch

Schlüsselwörter
event_source
event_receiver
__event
__hook
__raise