2009-12-03 2 views
1

Je suis en train de créer une application fonctionnant avec des plugins. J'utilise l'excellent framework de plugin JVCL. J'ai commencé à utiliser le plugin. Cela a fonctionné comme un charme mais avait un gros inconvénient: le besoin de donner des runtimes bpl (23Mo). Je passe donc au plugin DLL.Comment implémenter une méthode de rappel dans DLL (Delphi/TJVPluginManager + TJvPlugin)

Je dois appeler une méthode (procédure avec 3 paramètres) de l'application host mais je ne sais pas comment procéder. OBones expliqué dans le nouveau groupe Jedi pour utiliser les fonctions de rappel, mais je n'ai aucune idée sur la façon d'y parvenir.

Est-ce que quelqu'un peut m'expliquer ou mieux, envoyez-moi un exemple? Vous pouvez prendre la démo JVCL 1SimplePlugin et la mettre à jour.

Remercier à l'avance

BR

Stephane Wierzbicki

Répondre

3

Le concept de base est assez simple. Une méthode de rappel est un pointeur sur une méthode que vous transmettez à du code afin qu'elle puisse l'appeler à un moment donné pour vous permettre de personnaliser son comportement. Si vous avez une quelconque expérience avec Delphi, vous connaissez déjà les méthodes de rappel sous un nom différent: "gestionnaires d'événements".

Essayez quelque chose comme ça dans votre plugin:

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

procedure AddCallback(callback: TMyEvent); 

Cette procédure prendrait le pointeur de la méthode TMyEvent passé et le stocker quelque part. Disons dans une variable appelée FCallback. Lorsque vient le temps pour appeler votre application, le code ressemblerait à ceci:

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

Vous appelleriez de votre application comme ça, quand vous configurez le plugin:

MyPlugin.AddCallback(self.callbackProc); 

Parfois, vous devrez mettre un @ devant (@ self.callbackProc) pour que le compilateur puisse dire 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.

+0

Merci, mais je n'ai aucune idée sur la façon de l'implémenter avec le framework JvPlugin. J'essaie toujours de trouver un moyen de déclarer correctement ceci dans: - mon JVPlugin (comment déclarer la procédure AddCallback dans la section de déclaration). - mon HostApplication (comment appeler la procédure AddCallback par exemple) –

+0

Êtes-vous sûr que OBones a l'intention de l'implémenter dans le framework jvplugin? –

+0

Il suffit de vérifier le groupe de discussion JVCL "Quelle est la meilleure façon d'envoyer un message d'un TJvPlugin à l'hôte?" du 03 févr. 2009 –

Questions connexes