2010-11-25 13 views
3

Im derzeit arbeiten in einem einfachen Programm, das Plugins mit DLL-Bibliotheken (mit dem TJvPlugManager aus dem JVCL-Framework) implementiert.Der beste Weg, um einen Rückgabewert mit TJvPluginManager

Bis jetzt finde ich heraus, wie man diese Komponente verwendet, um Befehle zu handhaben, aber was, wenn ich einen Rückgabewert von einer benutzerdefinierten Funktion innerhalb der Bibliothek haben möchte. Es ist möglich, eine bestimmte Funktion vom Host aus aufzurufen, indem Sie den TJvPlugManager? Wie soll ich das umsetzen?

Die Idee des Lochs ist es, eine Funktion zu haben, die in jeder DLL eine Zeichenfolge zurückgibt, so dass sie mit einem einfachen Cicle aufgerufen werden kann. Ich denke, dass ich das von Hand machen kann (mit dynamischem Laden), aber ich möchte so viel wie möglich mit TJvPluginManager arbeiten.

Vielen Dank für Ihre Zeit. John Marko

Antwort

6

Die Art, wie ich es mache, ist eine Schnittstelle in das Plugin zu implementieren und es vom Host z.

MyApp.Interfaces.pas 

uses 
    Classes; 

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

implmentation 

end. 

Das 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; 

... 

Gastgeber:

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; 

Hoffnung, das hilft.

+0

+1. Ich habe gleich mit der gleichen Antwort geantwortet, aber Sie haben mich dafür geschlagen. –