Freigeben über


__unhook

Trennt eine Handlermethode von einem Ereignis.

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 lösen:

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

    • COM-Ereignisse: SourceClass ist die Quellschnittstelle des Ereignisses, und EventMethod ist eine ihrer Methoden.

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

  • interface
    Der Name der Schnittstelle, der von receiver gelöst wird. Gilt nur bei COM-Ereignisempfängern, bei welchen der layout_dependent-Parameter des event_receiver-Attributs true ist.

  • source
    Ein Zeiger auf eine Instanz der Ereignisquelle. Abhängig vom Code type, der in event_receiver angegeben wird, kann source einer der folgenden Werte 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 gelöst werden soll. Der Handler wird als eine Methode einer Klasse oder als Verweis auf selbige angegeben; wenn Sie den Klassennamen nicht angeben, geht __unhook davon aus, dass die Klasse diejenige ist, in welcher er aufgerufen wird.

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

    • COM-Ereignisse: ReceiverClass ist die Ereignisempfängerschnittstelle, und HandlerMethod ist einer der Handler.

    • 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, wird standardmäßig die Empfängerklasse oder Struktur verwendet, in der __unhook 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 __unhook in einem Ereignisempfänger, um eine Handlermethode von einer Ereignismethode zu lösen bzw. die Zuordnung aufzuheben.

Es gibt drei Formen von __unhook. Sie können in den meisten Fällen das erste (four-argument) Formular verwenden. Sie können das zweite (two-argument) Formular von __unhook nur für einen COM-Ereignisempfänger verwenden. Dadurch wird die gesamte Ereignisschnittstelle gelöst. 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 __unhook für ein Ereignis und einen Ereignishandler aufrufen, die nicht bereits verknüpft sind, hat dies keine Auswirkungen.

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 __hook und __unhook außerhalb des Ereignisempfängers aufgerufen werden.

Eine Alternative zur Verwendung von __unhook ist die Verwendung des Operators "-=".

Weitere Informationen über die Codierung von verwalteten Ereignissen in der neuen Syntax finden Sie unter event (Komponentenerweiterungen für C++).

Hinweis

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

Beispiel

Beispiele finden Sie unter Ereignisbehandlung in systemeigenem C++ und Ereignisbehandlung in COM.

Siehe auch

Referenz

C++-Schlüsselwörter

event_source

event_receiver

__event

__hook

__raise