![]() |
Delphi-Wrapper für C-DLL - Frage zu Kapselung
Hallo Zusammen,
ich möchte einen Delphi-Wrapper für eine C-DLL schreiben, übrigens meinen ersten. ;-) Die Funktionen der DLL möchte ich in einer Klasse Kapseln, damit alles zusammenbleibt, was zusammengehört. ;-) Kann ich folgendes tun, oder spricht da was gegen?
Delphi-Quellcode:
Vor allem ist mir nicht klar, ob ich, ohne das es irgendwann knallt, in einer Klassendefinition mit stdcall arbeiten kann.
type
TTestKlasse = Class (TObject) public GetVersion: function: WideString; stdcall; tuWas: procedure; stdcall; ... constructor Create; end; implementation constructor TTestKlasse.Create; begin inherited Create; // ... DLL laden ... @GetVersion := GetProcAdress (Dll, 'GetVersion'); ... end; Für Hilfe wäre ich sehr dankbar! Viele Grüße Marco |
Re: Delphi-Wrapper für C-DLL - Frage zu Kapselung
Zitat:
Klassen innerhalb der Dll kannst Du verwenden wie du willst, jedoch Exports müssen den Aufrufkonventionen entsprechen. Also: Nein lass es! Sieh mal in der DP da gibts diverse DLL-Tutorials. lg. Astat |
Re: Delphi-Wrapper für C-DLL - Frage zu Kapselung
Hallo astat,
Dann dumme Frage zweiter Teil, ;-): Wie die Funktionen generell dynamisch eingebunden werden ist mir klar. Aber: kann ich das ganze irgendwie in eine Klasse verpacken, damit die Funktionen unter dieser Klasse gekapselt sind? Also zu Deutsch, hätte ich gern in meinem Hauptprogramm nicht:
Delphi-Quellcode:
sondern etwas in der art wie:
label1.caption := GetVersion
Delphi-Quellcode:
Nur wie kriege ich die Funktionen sinnvoll in die Klasse rein?
Label1.Caption := Testklasse.GetVersion
Viele Grüße Marco |
Re: Delphi-Wrapper für C-DLL - Frage zu Kapselung
Du msst die Funktion innerhalb der Klasse kapseln:
Delphi-Quellcode:
type TFuncGetVersion=function:Widestring;stdcall; TTestKlasse = Class (TObject) private FFuncGetVersion:TFuncGetVersion; public GetVersion: function: WideString; ... constructor Create; end; implementation constructor TTestKlasse.Create; begin inherited Create; // ... DLL laden ... @FFuncGetVersion := GetProcAdress (Dll, 'GetVersion'); ... end; function TTestKlasse.GetVersion:WideString; begin if assigned(FFuncGetVersion) then result:=FFuncGetVersion; else Fehler; end; |
Re: Delphi-Wrapper für C-DLL - Frage zu Kapselung
Hallo Marco Steinebach, noch ein Tipp, bleib Win32API sauber, dh. keine Strings, WideStrings, Dynamische Arrays für Exports verwenden. Besser Pointer für Dynamische strukturen verwenden.
lg. Astat |
Re: Delphi-Wrapper für C-DLL - Frage zu Kapselung
Hallo,
mit den Exports ist es recht einfach, da die DLL nicht von mir ist. ;-) Aber danke fpür den Tip für eigene Projekte. Also kann ich entweder die Typdeklaration rausnehmen, oder, wie o.g. die Funktionen als Klassenvariablen deklarieren. Ganz herzlichen Dank - die Arbeit kann weitergehen. ;-) Viele Grüße Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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