Einzelnen Beitrag anzeigen

slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
146 Beiträge
 
#1

Problem mit Variablendeklaration und Vererbung

  Alt 12. Mär 2022, 14:33
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
  Mit Zitat antworten Zitat