AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit Variablendeklaration und Vererbung
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Variablendeklaration und Vererbung

Ein Thema von slemke76 · begonnen am 12. Mär 2022 · letzter Beitrag vom 12. Mär 2022
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz