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?