2010-11-25 45 views
3

Je travaille actuellement dans un programme simple qui implémente des plugins avec des bibliothèques DLL (en utilisant le TJvPluginManager de JVCL Framework). Jusqu'à présent, j'ai compris comment utiliser ce composant pour gérer les commandes, mais si je veux avoir une valeur de retour d'une fonction personnalisée dans la bibliothèque ?. Il est possible d'appeler une certaine fonction de l'hôte en utilisant le TJvPluginManager? Comment dois-je l'implémenter? L'idée du trou est d'avoir une fonction qui retourne une chaîne à l'intérieur de chaque DLL afin qu'elle puisse être appelée en utilisant un simple cicle. Je pense que je peux le faire à la main (en utilisant le chargement dynamique) mais je veux travailler avec TJvPluginManager autant que possible.Meilleure façon d'avoir une valeur de retour avec TJvPluginManager

Nous vous remercions de votre temps. John Marko

Répondre

6

La façon dont je le fais est de mettre en œuvre une interface dans le plugin et l'appeler de l'hôte, par exemple.

MyApp.Interfaces.pas 

uses 
    Classes; 

type 
    IMyPluginInterface = interface 
    ['{C0436F76-6824-45E7-8819-414AB8F39E19}'] 
    function ConvertToUpperCase(const Value: String): String; 
    end; 

implmentation 

end. 

Le plugin:

uses 
    ..., MyApp.Interfaces; 

type 
    TMyPluginDemo = class(TJvPlugIn, IMyPluginInterface) 
    public 
    function ConvertToUpperCase(const Value: String): String; 
    ... 

implmentation 

function TMyPluginDemo.ConvertToUpperCase(const Value: String): String; 
begin 
    Result := UpperCase(Value); 
end; 

... 

L'hôte:

uses 
    ..., MyApp.Interfaces; 

... 

function TMyHostApp.GetPluginUpperCase(Plugin: TjvPlugin; const Value: String): String; 
var 
    MyPluginInterface: IMyPluginInterface; 
begin 
    if Supports(Plugin, IMyPluginInterface, MyPluginInterface) then 
    Result := MyPluginInterface.ConvertToUpperCase(Value) 
    else 
    raise Exception.Create('Plugin does not support IMyPluginInterface'); 
end; 

Hope this helps.

+0

+1. J'avais raison de répondre avec la même réponse mais tu m'as battu. –