Mot clé __hook
Associe une méthode de gestionnaire à 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 __hook(
&SourceClass::EventMethod,
source,
&ReceiverClass::HandlerMethod
[, receiver = this]
);
long __hook(
interface,
source
);
Paramètres
&SourceClass::EventMethod
Pointeur vers la méthode d'événement à laquelle vous raccordez la méthode de 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 connecté à receiver
, uniquement pour les récepteurs d’événements COM dans lesquels le layout_dependent
paramètre 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
, source
il peut s’agir de 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 de gestionnaire d'événements à raccorder à 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 la classe, __hook
suppose que la classe est celle à partir de 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 __hook
est appelée.
Utilisation
Peut s'utiliser dans une portée de fonction quelconque, notamment Main, en dehors de la classe de récepteur d'événements.
Notes
Utilisez la fonction __hook
intrinsèque dans un récepteur d’événements pour associer ou raccorder une méthode de gestionnaire à une méthode d’événement. Le gestionnaire spécifié est ensuite appelé lorsque la source déclenche l'événement spécifié. Vous pouvez raccorder plusieurs gestionnaires à un même événement ou raccorder plusieurs événements à un même gestionnaire.
Il existe deux formes de __hook
. Vous pouvez utiliser le premier formulaire (quatre arguments) dans la plupart des cas, en particulier pour les récepteurs d’événements COM dans lesquels le paramètre layout_dependent de l’attribut event_receiver
est false
.
Dans ces cas, vous n’avez pas besoin de raccorder toutes les méthodes dans une interface avant de déclencher un événement sur l’une des méthodes. Vous devez uniquement raccorder la méthode qui gère l’événement. Vous pouvez utiliser la deuxième forme (deux arguments) de __hook
uniquement pour un récepteur d’événements COM dans lequel layout_dependent
= true
.
__hook
retourne une valeur longue. 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).
Le compilateur vérifie l'existence d'un événement et la conformité de la signature d'événement à la signature du délégué.
Vous pouvez appeler __hook
et __unhook
en dehors du récepteur d’événements, à l’exception des événements COM.
Une alternative à l’utilisation __hook
consiste à utiliser l’opérateur +=.
Pour plus d’informations sur le codage d’événements managés dans la nouvelle syntaxe, consultez event
.
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 en C++ natif et gestion des événements dans COM .
Voir aussi
Mots clés
Gestion des événements
event_source
event_receiver
__event
__unhook
__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