Thema: Plugin-System

Einzelnen Beitrag anzeigen

Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#1

Plugin-System

  Alt 26. Aug 2023, 17:26
Hallo,

ich würde gerne ein Plugin-System einführen, so dass der Benutzer entscheiden kann,
was er in sein Programm lädt ...
Ich habe dazu vor, einen Manager zu basteln, der folgenden Code enthält:
Delphi-Quellcode:
unit pluginManager;

interface

uses
  Windows, Classes, SysUtils, Forms, Dialogs,
  plugin;

type
  TkPlugInManager = class(TComponent)
  private
    FPlugins: TList;
  protected
    function GetPlugins: FPlugins;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    procedure LoadPlugin(FileName: String); virtual;
    procedure UnLoadPlugin(index: Integer); virtual;

    procedure GetLoadedPlugins(PluginList: TStrings); virtual;

    property PlugIns[index: Integer] : TkPlugin read GetPlugins; default
    property PlugInCount: Integer read GetPluginCount;

  published
    property Version: String read GetVersion write SetVersion;
  end;

implementation

constructor TkPlugInManager.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

destructor TkPlugInManager.Destroy;
begin
  inherited Destroy;
end;

end.
Für die Plugin-Struktur würde ich folgende verwenden:
Delphi-Quellcode:
unit plugin;

interface

uses
  Windows, Classes, SysUtils, Forms, Dialogs;

type
  TkPlugin = class(TObject)
  private
    FHostApplication: TApplication;
    FFileName : String;
    FFileAuthor : String;
    FFileDescription: String;
    FManager : TComponent;
  public
    constructor Create;
    destructor Destroy; override;

    function GetName: String; virtual; stdcall;
    function GetAuthor: String; virtual; stdcall;
    function GetDescription: String; virtual; stdcall;

    function GetNumCommands: Integer; virtual; stdcall;

    property HostApplication: TApplication read FHostApplication;
    property FileName: String read FFileName;
    property Manager: TComponent read FManager;
  end;

implementation

constructor TkPlugin.Create;
begin
end;

destructor TkPlugin.Destroy;
begin
end;

function TkPlugin.GetName: String;
var
  TheFileName : array[0..MAX_PATH] of char;
begin
  FillChar(TheFileName, sizeof(TheFileName), #0);
  GetModuleFileName(hInstance, TheFileName, sizeof(TheFileName));
  result := TheFileName;
end;

function TkPlugin.GetAuthor: String;
begin
  result := FFileAuthor;
end;

function TkPlugin.GetDescription: String;
begin
  result := FFileDescription;
end;

function TkPlugin.GetNumCommands: Integer;
begin
  result := 0;
end;

end.
in der Zeile: 14 bekomme ich einen Fehler: "Undeclared identifier: 'FPlugins'."
könnt Ihr mich helfen, ein kleines Plugin-System zu basteln ?

Danke schonmal für sachdienliche Hinweise

paule32
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat