Partager via


Gestion des événements en C++ natif

Dans la gestion des événements C++ native, vous avez installé une source d'événements et un récepteur d'événements à l'aide de les attributs d' event_source et d' event_receiver , respectivement, en spécifiant type=native.Ces attributs permettent les classes auxquelles ils sont appliqués pour déclencher des événements et gèrent les événements dans un natif, le contexte de COM.

Déclaration d'événements

Dans une classe de source d'événements, utilisez le mot clé de __event sur une déclaration de méthode pour déclarer la méthode en tant qu'événement.veillez à déclarer la méthode, mais ne la définissez pas ; pour ce faire générera une erreur du compilateur, car le compilateur définit implicitement la méthode lorsqu'il est converti en événement.Les événements natifs peuvent être des méthodes avec zéro ou plus de paramètres.le type de retour peut être void ou n'importe quel type intégral.

Définition de gestionnaires d'événements

Dans une classe de récepteur d'événements, vous définissez des gestionnaires d'événements, qui sont des méthodes avec des signatures (types de retour, conventions d'appel, et arguments) qui correspondent l'événement qu'ils géreront.

Le raccordement des gestionnaires d'événements aux événements

Également dans une classe de récepteur d'événements, vous utilisez la fonction intrinsèque __hook pour associer des événements aux gestionnaires d'événements et __unhook pour dissocier des événements des gestionnaires d'événements.Vous pouvez connecter plusieurs événements à un gestionnaire d'événements, ou plusieurs gestionnaires d'événements à un événement.

Événements de mise à déclencher

Pour déclencher un événement, appelez simplement la méthode déclarée comme la classe de l'événement dans l'événement.Si les gestionnaires ont été accrochés à l'événement, les gestionnaires sont appelés.

ee2k0a7d.collapse_all(fr-fr,VS.110).gifCode natif d'événement C++

L'exemple suivant montre comment déclencher un événement en C++ natif.Pour compiler et exécuter l'exemple, consultez les commentaires du code.

Exemple

ee2k0a7d.collapse_all(fr-fr,VS.110).gifCode

// evh_native.cpp
#include <stdio.h>

[event_source(native)]
class CSource {
public:
   __event void MyEvent(int nValue);
};

[event_receiver(native)]
class CReceiver {
public:
   void MyHandler1(int nValue) {
      printf_s("MyHandler1 was called with value %d.\n", nValue);
   }

   void MyHandler2(int nValue) {
      printf_s("MyHandler2 was called with value %d.\n", nValue);
   }

   void hookEvent(CSource* pSource) {
      __hook(&CSource::MyEvent, pSource, &CReceiver::MyHandler1);
      __hook(&CSource::MyEvent, pSource, &CReceiver::MyHandler2);
   }

   void unhookEvent(CSource* pSource) {
      __unhook(&CSource::MyEvent, pSource, &CReceiver::MyHandler1);
      __unhook(&CSource::MyEvent, pSource, &CReceiver::MyHandler2);
   }
};

int main() {
   CSource source;
   CReceiver receiver;

   receiver.hookEvent(&source);
   __raise source.MyEvent(123);
   receiver.unhookEvent(&source);
}

ee2k0a7d.collapse_all(fr-fr,VS.110).gifSortie

MyHandler2 was called with value 123.
MyHandler1 was called with value 123.

Voir aussi

Référence

Gestion des événements