Hallo zusammen,
nachdem mir hier im Forum Ende 2009 bzgl. der Implementation einer Plugin-Struktur für DLLs supergut geholfen wurde, möchte ich das Programm jetzt gerne erweitern.
Es geht darum, mit einer Routine verschiedene DLLs mit verschiedenen Interfaces einzulesen.
Im Moment sieht es so aus, dass es eine Interface-Deklaration gibt:
Delphi-Quellcode:
type
IImport = interface(IInterface)
['{6E19FD1D-E50C-4701-8710-611F398DC4BE}']
function checkModuleStatus():TModuleStatus;
procedure DoImport();
procedure SetParameter(name: PChar; value: PChar);
end;
Die Instanz wird nach einem "Supports" geholt:
Delphi-Quellcode:
...
libs[j]:=LoadLibrary(@dllname[1]);
if libs[j] <> 0 then GetInterface:=GetProcAddress(libs[j], 'GetInterface');
if (not Supports(GetInterface, IImport)) then GetInterface:=nil;
if Assigned(GetInterface) then begin
Adapter:=GetInterface();
....
Das Programm wird jetzt um eine weitere (komplett andere) Plugin-Struktur ergänzt.
Dafür habe ich wiederum ein Interface deklariert:
Delphi-Quellcode:
type
IExport = interface(IInterface)
['{70D193B5-0C3A-4960-ACE9-9103959AA06E}']
procedure tuwasanderes();
end;
Dir Frage ist jetzt, wie bekomme ich meine
DLL-Lade-Routine in eine Funktion ausgelagert ?
Das Problem ist, dass ich für den Vergleich mittels "Supports" die Interface-Deklaration benötige - entweder IImport oder IExport.
Was ich schon probiert habe, ist so etwas:
Delphi-Quellcode:
function DLLLoader(useInterface: IInterface)
...
if (not Supports(GetInterface, useInterface)) then GetInterface:=nil;
...
Geht aber nicht; "es gibt keine überladene Funktion von Supports...".
Wie löse ich das Problem ?
Danke,
Sebastian