Einzelnen Beitrag anzeigen

Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Jedi Plugin --> Auf Hauptprogramm zugreifen

  Alt 12. Apr 2009, 15:10
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
Ralf Kaiser
  Mit Zitat antworten Zitat