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 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 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 IUnknownbasé 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 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 __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