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.