__unhook
Schlü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 undEventMethod
das Ereignis.COM-Ereignisse:
SourceClass
ist die Ereignisquellschnittstelle undEventMethod
eine seiner Methoden.Verwaltete Ereignisse:
SourceClass
ist die Ereignisquellklasse undEventMethod
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_receiver
der 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 undHandlerMethod
ist der Handler.COM-Ereignisse:
ReceiverClass
ist die Ereignisempfängerschnittstelle undHandlerMethod
gehört zu den Handlern.Verwaltete Ereignisse:
ReceiverClass
ist die Ereignisempfängerklasse undHandlerMethod
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für