Share via


Gestion des événements en mode natif C++

Dans la gestion des événements C++ native, vous configurez une source d’événements et un récepteur d’événements à l’aide des attributs event_source et event_receiver, respectivement, en spécifiant=typenative . Ces attributs permettent aux classes sur lesquelles ils sont appliqués pour déclencher des événements et de gérer les événements dans un contexte natif et non COM.

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é.

Déclaration d’événements

Dans une classe source d’événement, utilisez la __event mot clé 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. Si vous le faites, il génère une erreur de compilateur, car le compilateur définit implicitement la méthode lorsqu’elle est effectuée dans un événement. Les événements natifs peuvent être des méthodes avec zéro, un ou plusieurs 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. Les gestionnaires d’événements sont des méthodes avec des signatures (types de retour, conventions d’appel et arguments) qui correspondent à l’événement qu’ils géreront.

Raccordement de gestionnaires d’événements à des événements

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

Déclenchement d’événements

Pour déclencher un événement, appelez la méthode déclarée en tant qu’événement dans la classe source d’événement. Si des gestionnaires ont été raccordés à l'événement, les gestionnaires sont appelés.

Code d’événement C++ natif

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. Pour générer le code dans l’IDE Visual Studio, vérifiez que l’option /permissive- est désactivée.

Exemple

Code

// evh_native.cpp
// compile by using: cl /EHsc /W3 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);
}

Sortie

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

Voir aussi

Gestion des événements