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=type
native
. 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
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