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 et EventMethod l’événement.

  • Événements COM : SourceClass est l’interface source d’événement et EventMethod est l’une de ses méthodes.

  • Événements managés : SourceClass est la classe source d’événements et EventMethod 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 IUnknownbasé 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 et HandlerMethod est le gestionnaire.

  • Événements COM : ReceiverClass est l’interface du récepteur d’événements et HandlerMethod est l’un de ses gestionnaires.

  • Événements managés : ReceiverClass est la classe de récepteur d’événements et HandlerMethod 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