Servus,
nehmen wir an ich will für das einbinden von DLLs ein kleines Plugin-System machen.
Delphi-Quellcode:
type
IPlugin = Interface
[]
procedure Init;
procedure finalize;
....
end;
IFoo = interface
[]
procedure DoSomething;
end;
die
DLL exportiert
Delphi-Quellcode:
function GetPlugin: IPlugin
begin
result := ....
end;
IPlugin soll dabei als allgemeines Interface dienen um so Dinge wie evtl. notwendige
DB-Zugriff zu initialisieren bzw. allgemeine Initialisierung und Freigaben in der
DLL zu kapseln. IFoo ist die eigentliche "Funktion" der
DLL. Kann ich diese einfach "Huckepack" übergeben:
DLL:
Delphi-Quellcode:
type
TFoo = class(TInterfacedObject, IPlugin, IFoo)
....
end;
und dann in der Anwendung:
Delphi-Quellcode:
Type
TFoo =
function: IPlugin;
var
bar: TFoo;
plugin: IPlugin;
Foo: IFoo;
begin
bar := GetProcAdress(
Handle, '
GetPlugin');
if Assigned(bar)
then
begin
plugin := bar();
plugin.init;
plugin.QueryInterface(IFoo, Foo);
Foo.DoSomething;
end;
end;
Sprich: Darf ich hier lieb nachfragen, ob mein benötigtes Interface von der
DLL implementiert wird um dann damit weiter zu arbeiten oder spricht irgend etwas dagegen?