Freigeben über


__unhook

Trennt eine Handlermethode ein Abonnement für ein 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, aus der Sie die Ereignishandlermethode Verknüpfung aufgehoben werden:

    • Eingeboren-C++-Ereignisse: SourceClass ist die Ereignisquellen und - Klasse EventMethod ist das Ereignis.

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

    • Verwaltete Ereignisse: SourceClass ist die Ereignisquellen und - Klasse EventMethod ist das Ereignis.

  • interface
    Der Name, der von receiver, nur für COM-Ereignis empfänger Verknüpfung definiert wird, in denen der layout_dependent-Parameter des Attributs event_receivertrueist.

  • source
    Ein Zeiger auf eine Instanz der Ereignisquelle.Abhängig vom Code type , das in event_receivereine Quelle angegeben ist, kann der folgenden Werte sein:

    • Ein systemeigener Ereignisquellenobjektzeiger.

    • Ein Zeiger er-basiert IUnknown(COM-Quelle).

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

  • **&**ReceiverClass::HandlerMethod
    Ein Zeiger auf die Verknüpfung aus einem Ereignis Ereignishandlermethode aufgehoben werden soll.Der Handler wird z. B. eine Methode einer Klasse oder eines Verweises auf den gleichen angegeben. Wenn Sie nicht den Klassennamen angeben, geht __unhook die Klasse an, die die zu sein, in dem sie aufgerufen wird.

    • Eingeboren-C++-Ereignisse: ReceiverClass ist die Ereignisempfänger Klasse und HandlerMethod ist der Handler.

    • COM-Ereignisse: ReceiverClass ist die Ereignisempfänger Oberfläche und HandlerMethod ist einer der Handler.

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

  • receiver(optional)
    Ein Zeiger auf eine Instanz der Ereignisempfänger Klasse.Wenn Sie keinen Empfänger angeben, wird standardmäßig die Empfänger - Klasse oder Struktur, in der __unhook aufgerufen wird.

Verwendung

Kann die Verwendung in jedem Gültigkeitsbereich der Funktion, einschließlich main, außerhalb der Ereignisempfänger Klasse.

Hinweise

Verwenden Sie die systeminterne Funktion __unhook in einem Ereignisempfänger, um Detach“ oder „markieren Sie eine Handlermethode aus einer Ereignismethode Verknüpfung auf.

Es gibt drei Formen von __unhook.Sie können das erste Argument Vier () - Formular in den meisten Fällen verwenden.Sie können das zweite Argument Zwei () - Formular von __unhook nur für ein COM-Ereignis empfänger verwenden. dieses hebt die gesamte Ereignisschnittstelle Verknüpfung auf.Sie können das dritte Argument (Ein) Formular verwenden, um alle Delegaten aus der angegebenen Quelle Verknüpfung aufgehoben.

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

Wenn Sie __unhook auf einem Ereignis und Ereignishandler aufrufen, die noch nicht gehakt sind, hat dies keine Auswirkungen.

Zur Kompilierzeit überprüft der Compiler, dass das Ereignis Parametertyp der Überprüfung mit dem angegebenen Handler vorhanden ist und ausgeführt wird.

Mit Ausnahme von COM-Ereignissen können __hook und __unhook außerhalb des Ereignisempfängers aufgerufen werden.

Eine Alternative zur Verwendung von __unhook entspricht den Operator - =.

Weitere Informationen über Codierung verwaltete Ereignisse in der neuen Syntax finden Sie unter Ereignis (Visual C++).

HinweisHinweis

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

Beispiel

Weitere Informationen finden Sie unter Ereignisbehandlung in systemeigenem C++ und Beispiele für Ereignisbehandlung in COM .

Siehe auch

Referenz

C++-Schlüsselwörter

event_source

event_receiver

__event

__hook

__raise