Hallo alcaeus,
interessantes Konzept. Interfaces sind hier der richtige Weg, mache Dir keine Gedanken über Referenzzählung oä: Dein System benötigt ohnehin einen Weg, Plug-ins sauber zu entladen. Wenn Du wirklich vorhast, ausschließlich Forms anzuzeigen, bekommst Du die Freigabe über das TComponent-Konzept des Owners gratis.
Ziehe in Betracht, nicht die Klasse sondern ein Objekt zurückzugeben, auf diese Weise können auch Exemplar von Klassen verwendet werden, deren Konstruktur nicht in der Oberklasse (virtuell) eingeführt ist...
Nicht nur das Hauptformular auch eine Verwaltungsinstanz könnte so in Frage kommen. In diesem Fall könnte Dein Plugin eine Fabrik zurückgeben und über diese erzeugst Du dann Deine Exemplare:
Delphi-Quellcode:
myFactory := Module.GetFactory;
myForm := myFactory.CreateForm;
myMenuItems.Add(myFactory.CreateMenuItems);
Hast Du erst einmal ein Exemplar deiner "dynamisch nachgeladenen" Klasse (egal ob über TFormClass(Module.MainFormClass).Create(Applicatio n) oder über eine Fabrik) kann Du ganz normal eine Interfacereferenz erfragen:
Delphi-Quellcode:
var
myMainForm: IModuleMainForm;
begin
//..
Module.MainForm := TFormClass(Module.MainFormClass).Create(Application);
if Supports(Module.Mainform, IModuleMainForm, myMainForm) then
myMainForm.SetProgramStyle(AStyle);
Weiterhin viel Erfolg!