Hallo zusammen,
ich habe ein Problem, bei dem ich nocht nicht einmal weiss, wie ich danach suchen soll
Ich habe eine Anwendung, die dynamisch Import und Export-DLLs nachlädt - es kann jeweils mehrere DLLs je Import/Export geben. Die DLLs implementieren entweder das Interface IImport oder IExport.
Ich habe jetzt einen
DLL-Loader für die Import DLLs fertig (funktioniert auch prima):
Delphi-Quellcode:
unit ThreadClasses;
type
TImportAdapters =
array of IImport;
TPDFThread =
class(TThread)
public
function DLLLoader(Directory, Filemask:
string):TImportAdapters;
end;
[...]
function TPDFThread.DLLLoader(Directory, Filemask:
string): TAdapters;
type
TFNGetImportInterface =
function(): IImport;
stdcall;
[...]
var
GetImportInterface: TFNGetImportInterface;
ImportAdapters: TImportAdapters;
[..]
begin
[...]
if (
not Supports(GetImportInterface, IImport))
then GetImportInterface:=nil;
[...]
end;
Aufgerufen wird der Loader aus einer abgeleiteten Klasse:
Delphi-Quellcode:
unit ThreadImport;
[...]
type
TImportThread =
class(TPDFThread)
[...]
procedure TImportThread.Execute;
begin
ImportAdapters:=DLLLoader(ExtractFilePath(paramstr(0)), '
Import*.dll');
[...]
end;
Jetzt würde ich natürlich gerne - um doppelten Code zu vermeiden - den Loader auch für den Export nutzen - klar irgendwie
Die Funktion DLLLoader ist schon in der Vaterklasse, verwendet aber Variablen für den Import (IImport, TFNGetImportInterface, etc.) - auch der Rückgabetyp ist derzeit TImportAdapters.
Die Klassen sehen so aus:
TPDFThread = class(TThread) <--- hier soll der
DLL-Loader rein
+ TExportThread = class(TPDFThread) <-- von hier soll der
DLL-Loader aufgerufen werden
+ TImportThread = class(TPDFThread) <-- dito
Um meine Frage an einem Beispiel fest zu machen:
function DLLLoader(Directory, Filemask: string):TImportAdapters;
Wie muss ich den Variablentypen deklarieren, damit er beim Aufruf aus der Import-Klasse TImportAdapters und beim Aufruf aus der Export-Klasse TExportAdapters zurückgibt? Gleiches gilt für den eigentlichen Code innerhalb von DLLLoader():
if (not Supports(GetImportInterface, IImport)) then GetImportInterface:=nil;
Ich hoffe, ich habe das Problem verständlich ausgedrückt?
Danke,
Sebastian