Fonctions de rappel et leurs utilisations
1 Aperçu des fonctions de rappel
La fonction de rappel est un mécanisme dans lequel l'appelant transmet certains paramètres à l'objet lors de l'initialisation d'un objet (l'objet fait ici référence à des objets en POO, des fonctions globales, etc.), et transmet en même temps une fonction à laquelle l'appelant peut accéder. . L'adresse est transmise à l'objet. Cette fonction est un accord de notification entre l'appelant et l'appelé Lorsque l'événement convenu se produit, l'appelé (incluant généralement un thread de travail) appellera la fonction en fonction de l'adresse de la fonction de rappel.
De cette façon, l’appelant est dans un thread et l’appelé dans un autre thread. Message : le message peut également être considéré comme une forme de rappel, car le message est également transmis par l'appelant à l'appelé lors de l'initialisation. Un handle et un numéro de message, l'appelé envoie un message à l'appelant lorsque l'événement convenu se produit.
De cette façon, l'appelant est dans le thread principal et l'appelé est dans le thread principal ou le thread de travail. Modèle d'événement Delphi :
Il existe de nombreux composants visuels dans la VCL de Delphi qui utilisent des modèles d'événements, tels que l'événement OnCreate de TForm. Le principe est le suivant : spécifiez la fonction d'événement au moment de la conception, et lorsque l'événement est déclenché au moment de l'exécution, la fonction d'événement spécifiée au moment de la conception sera appelée. . Mécaniquement, le modèle d'événement Delphi est le même que les rappels. Il existe cependant quelques différences dans les formes spécifiques. Une fonction de rappel pure se présente sous la forme d'une fonction globale, tandis qu'un événement Delphi se présente sous la forme d'une méthode objet. Autrement dit, le type de fonction de rappel suivant peut être défini : type. TCallBackFunc = PRocedure (pData : Pointeur) de l'objet ;
2 Instructions d'utilisation des fonctions de rappel
La fonction de rappel est principalement utilisée dans deux situations. La première est que certaines API Windows nécessitent la fonction de rappel comme adresse de paramètre, et l'autre est qu'une fonction définie par l'utilisateur dans une occasion spécifique nécessite la fonction de rappel comme adresse de paramètre. , pour les fonctions définies par l'utilisateur, est généralement utilisé lors de l'appel de fonctions dans des bibliothèques de liens dynamiques. Il existe plusieurs étapes principales pour utiliser une fonction de rappel : 1. La définition d'un type de fonction de rappel n'est pas différente de la définition d'un processus de fonction général, mais sa définition doit répondre aux exigences de fonction de la fonction de rappel selon les besoins. in La définition d'une fonction ou d'une procédure doit être suivie d'une déclaration indiquant qu'il s'agit d'un appel standard Windows ; par exemple : typeTHDFunction= function(I:integer;s:string):integer pour la déclaration d'une procédure : type THDProcedure=procédure(s:string); stdcall;2.Définissez ensuite une fonction ou un processus correspondant basé sur ce prototype. Il n'y a aucune exigence concernant le nom de cette fonction ou de ce processus. Le type des paramètres de la fonction et le type de la valeur de retour doivent être complètement cohérents avec le rappel défini. type de fonction. Pour les procédures, il suffit qu’il s’agisse du même type de paramètre. Exemple : Définir une fonction correspondante et un processus correspondant basé sur le prototype de la fonction et du processus ci-dessus. Définition du prototype de fonction : Function HdFunExample(k:integer,sExam:string):integer; stdcall; Définition du processus : procédure HdProExample(sExam:string);stdcall; entier,sExam:string):entier;stdcall;BeginEnd;procédure HdProExample(sExam:string);stdcall;beginend; 4. Processus d'appel ; la fonction de rappel est généralement utilisée comme adresse d'entrée d'une certaine fonction dans le système selon le prototype de la fonction appelante : Supposons qu'il existe l'appel suivant ; fonction : fonction DyHdFunExample(HdFun:THDFunction;I: entier):booléen ; Dans la fonction appelante, la fonction de rappel peut être directement appelée en traitant le pointeur de fonction (c'est-à-dire que le paramètre dans la fonction appelante est le paramètre de type de fonction de rappel et il est directement exploité), de sorte que la fonction de rappel effectue certaines opérations. Autrement dit, la fonction de rappel est implémentée dans la fonction appelante. Appel : varI:integer;beginI:=DyHdFunExample (@HdFunExample,i);//…….End;
3 exemples
L'exemple de programme se trouve dans le répertoire H:/callback function examples/. L'utilisation des fonctions de rappel réside principalement dans les fonctions API originales de Windows, mais les fonctions d'appel définies par l'utilisateur se trouvent généralement dans des bibliothèques de liens dynamiques. Généralement, il n'est pas nécessaire d'utiliser des fonctions de rappel dans le même projet. (Je pense personnellement)...