Thema: Delphi Plugin-System fragen

Einzelnen Beitrag anzeigen

b1428727

Registriert seit: 20. Mai 2010
9 Beiträge
 
#16

Re: Plugin-System fragen

  Alt 27. Mai 2010, 13:54
Zitat von implementation:
Ich habe sowas bisher immer so geregelt, dass ich ein paar Interface zu jedem Zweck gebastelt habe (z.B. eins für Dock-Fenster, eins für Label, usw.) + ein Factory-Interface deklariere und beim Start des Plug-Ins die Factory übergebe.
Delphi-Quellcode:
type
  IFactory = interface
    function CreateDockWindow: IDockWindow;
    ...
  end;
  IDockWindow = interface
    function GetCaption: string;
    procedure SetCaption(val: string);
    property Caption: string read GetCaption write SetCaption;
    ...
  end;

type
  TFactory = class(TInterfacedObject, IFactory)
    ...
  end;
  TDockWindow = class(TInterfacedObject, IDockWindow)
    ...
  end;
Die Interfaces kann dann jeder Plug-In-Entwickler in seiner Sprache deklarieren.
Außerdem können die Plug-Ins schön klein bleiben, da ein Delphi-PlugIn dann z.B. keine VCL braucht, ein VC++-PlugIn keine MFC/WTL usw.

zu dieser methode hätte ich noch zwei fragen:

1. gibt es da keine probleme mit der freigabe?
ich kann doch kein DockWindow erzeugen, ein interface darauf an die dll geben und das DockWindow
schliessen ohne dass es in der DLL dann zu problemen kommt? was ich meine: die dll hat das interface
IDockWindow noch, obwohl das Formular bereits geschlossen/zerstört wurde...
wie geht man damit um?

2. wie funktioniert das mit events bei dieser methode? z.b. OnClick, OnChange, etc...

Gibt es dafür ein Interface welches z.B. so aussieht:
Delphi-Quellcode:
IEinInterface = interface
  procedure SetOnChange(OnChangeIntf: IOnChangeEvent);
  property OnChange: IOnNotifyEvent write SetOnChange;
end;

IOnChangeEvent = interface
  procedure OnChangeEvent(Sender: IObject);
end;
das plugin erstellt dann eine klasse TOnChangeEvent und setzt dies über IEinInterface.SetOnChange(MyOnChangeEvent)?

gibt es da eine elegantere lösung?
  Mit Zitat antworten Zitat