1 votes

Comment implémenter une méthode de rappel dans une DLL (Delphi / TJVPluginManager + TJvPlugin)

Je suis en train de construire une application qui fonctionne avec des plugins. J'utilise l'excellent framework de plugins JVCL. J'ai d'abord commencé à utiliser le plugin package. Il a fonctionné comme un charme mais avait un gros inconvénient : la nécessité de donner des runtimes bpl (23Mo). Je suis donc passé au plugin DLL.

J'ai besoin d'appeler une méthode (procédure ayant 3 paramètres) depuis l'application hôte mais je ne sais pas comment faire. Je ne sais pas comment faire. OBones a expliqué dans le newgroup Jedi qu'il fallait utiliser des fonctions de callback mais je n'ai aucune idée de la façon de le faire.

Quelqu'un peut-il m'expliquer ou mieux, m'envoyer un exemple ? Vous pouvez prendre la démo de JVCL 1SimplePlugin et la mettre à jour.

Merci d'avance

BR

Stéphane Wierzbicki

3voto

Mason Wheeler Points 52022

Le concept de base est assez simple. Une méthode de rappel est un pointeur vers une méthode que vous passez à un code afin qu'il puisse l'appeler à un moment précis pour vous permettre de personnaliser son comportement. Si vous avez une quelconque expérience de Delphi, vous connaissez déjà les méthodes de rappel sous un autre nom : les "gestionnaires d'événements".

Essayez quelque chose comme ceci dans votre plugin :

type
   TMyEvent = procedure(param1, param2, param3: integer) of object;

procedure AddCallback(callback: TMyEvent);

Cette procédure prend le pointeur de la méthode TMyEvent qui lui a été transmis et le stocke quelque part. Disons dans une variable appelée FCallback. Lorsque le moment est venu d'appeler votre application, le code ressemblerait à ceci :

if assigned(FCallback) then
   FCallback(param1, param2, param3);

Vous l'appelleriez depuis votre application comme ceci, lorsque vous configurez le plugin :

MyPlugin.AddCallback(self.callbackProc);

Il est parfois nécessaire de mettre un @ devant (@self.callbackProc) pour que le compilateur sache qu'il s'agit d'un pointeur de méthode et non d'un appel de méthode, mais ce n'est pas toujours nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X