Hallo,
ich habe das immer so gemacht, dass ich für meine Plugins Interfaces definiert habe.
Ein einfaches Beispiel bei dem verschiedene Informationen über das Plugin abgefragt werden:
Zuerst die Interfacedeklaration:
Delphi-Quellcode:
type
IPluginInterface = interface(IInterface)
['{71BB801B-45D4-481D-B890-C7A51E51A614}']
function GetCaption: PChar; stdcall;
function GetPluginDescription: PChar; stdcall;
function GetPluginAuthor: PChar; stdcall;
function GetPluginCopyright: PChar; stdcall;
end;
Nun erzeugen wir ein Plugin, das dieses Interface implementiert:
Delphi-Quellcode:
type
TPluginSimpleDemo = class(TJvPlugin, ISimplePlugin)
procedure JvPlugInDestroy(Sender: TObject);
procedure JvPlugInCreate(Sender: TObject);
private
public
function GetPluginAuthor: PAnsiChar; stdcall;
function GetPluginCopyright: PAnsiChar; stdcall;
function GetPluginDescription: PAnsiChar; stdcall;
function GetCaption: PAnsiChar; stdcall;
end;
Jetzt kann das Hauptprogramm, nachdem das Plugin geladen ist Daten abfragen:
Delphi-Quellcode:
aPlug := JvPluginManager.Plugins[0]; // normalerweise in einer Schleife
// Test ob das Plugin das Interface ISimplePlugin unterstützt
if aPlug.GetInterface(ISimplePlugin, aSimplePlugin) then begin
authorName := aSimplePlugin.GetPluginAuthor;
end;
Natürlich ist man nicht an eine Interfacedefinition gebunden. Ich habe in einem grösseren Projekt schon insgesamt 8 verschiedene Plugin-Typen benutzt. Diese wurden, nachdem Sie geladen waren, einfach mittels des Tests welches Interface sie unterstützen nach Funktionen geordnet im Menüsystem verteilt.
Ciao,
Ralf