Mot clé __unhook
Dissocie une méthode de gestionnaire d’un événement.
Remarque
Les attributs d’événement en C++ natifs sont incompatibles avec la norme C++. Ils ne sont pas compilés lorsque vous spécifiez le /permissive-
mode de conformité.
Syntaxe
long __unhook(
&SourceClass::EventMethod,
source,
&ReceiverClass::HandlerMethod
[, receiver = this]
);
long __unhook(
interface,
source
);
long __unhook(
source
);
Paramètres
&SourceClass::EventMethod
Pointeur vers la méthode d’événement à partir de laquelle vous décochez la méthode du gestionnaire d’événements :
Événements C++ natifs :
SourceClass
est la classe source d’événement etEventMethod
l’événement.Événements COM :
SourceClass
est l’interface source d’événement etEventMethod
est l’une de ses méthodes.Événements managés :
SourceClass
est la classe source d’événements etEventMethod
est l’événement.
interface
Nom de l’interface déconnecté du récepteur, uniquement pour les récepteurs d’événements COM dans lesquels le paramètre layout_dependent de l’attribut event_receiver
est true
.
source
Pointeur vers une instance de la source d'événement. Selon le code type
spécifié dans event_receiver
, la source peut être l’un des types suivants :
Un pointeur d'objet source de l'événement natif.
Pointeur
IUnknown
basé sur un pointeur (source COM).Un pointeur d'objet managé (pour les événements managés).
&ReceiverClass::HandlerMethod
Pointeur vers la méthode du gestionnaire d’événements à retirer d’un événement. Le gestionnaire est spécifié sous la forme d’une méthode d’une classe ou d’une référence au même ; si vous ne spécifiez pas le nom de classe, __unhook
suppose que la classe est celle dans laquelle elle est appelée.
Événements C++ natifs :
ReceiverClass
est la classe de récepteur d’événements etHandlerMethod
est le gestionnaire.Événements COM :
ReceiverClass
est l’interface du récepteur d’événements etHandlerMethod
est l’un de ses gestionnaires.Événements managés :
ReceiverClass
est la classe de récepteur d’événements etHandlerMethod
est le gestionnaire.
receiver
(facultatif) Pointeur vers une instance de la classe de récepteur d’événements. Si vous ne spécifiez pas de récepteur, la valeur par défaut est la classe de récepteur ou la structure dans laquelle __unhook
est appelée.
Utilisation
Peut être utilisé dans n’importe quelle étendue de fonction, y compris main
, en dehors de la classe de récepteur d’événements.
Notes
Utilisez la fonction __unhook
intrinsèque dans un récepteur d’événements pour dissocier ou « dissocier » une méthode de gestionnaire à partir d’une méthode d’événement.
Il existe trois formes de __unhook
. Vous pouvez utiliser la première forme (à quatre arguments) dans la plupart des cas. Vous pouvez utiliser la deuxième forme (à deux arguments) de __unhook
uniquement pour un récepteur d’événements COM ; il déshooke l’interface d’événement entière. Vous pouvez utiliser la troisième forme (un argument) pour déconnecter tous les délégués de la source spécifiée.
Une valeur de retour différente de zéro indique qu'une erreur s'est produite (les événements managés lèvent une exception).
Si vous appelez __unhook
un événement et un gestionnaire d’événements qui ne sont pas déjà connectés, cela n’aura aucun effet.
Au moment de la compilation, le compilateur vérifie que l'événement existe et effectue la vérification du type de paramètre avec le gestionnaire spécifié.
Vous pouvez appeler __hook
et __unhook
en dehors du récepteur d’événements, à l’exception des événements COM.
Une alternative à l’utilisation __unhook
consiste à utiliser l’opérateur -= .
Pour plus d’informations sur le codage d’événements managés dans la nouvelle syntaxe, consultez l’événement.
Remarque
Une classe ou structure modélisée ne peut pas contenir d'événements.
Exemple
Pour obtenir des exemples, consultez Gestion des événements dans C++ natif et Gestion des événements dans COM .
Voir aussi
Mots clés
event_source
event_receiver
__event
__hook
__raise
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour