![]() |
AW: dll in Delphi verwenden
Den Code vom dynamischen oder vom statischen dll Aufrufprogramm?
|
AW: dll in Delphi verwenden
Hallo,
dynamisch Hier ist übrigens noch eine interessante Seite zu Datentypen-Übersetzung ![]() Aber Achtung: BOOL kann <> bool sein siehe auch hier ![]() Die Typen mit großen Buchstaben sind meistens Windows-Typen (winapi). Also muss das darüber gehen. Einpaar Infos zur Calling Conventing ![]() dort nach stdcall suchen stdcall und cdecl sind also mitnichten das gleiche ... |
AW: dll in Delphi verwenden
Folgende Version verursacht keine Fehler mehr:
Delphi-Quellcode:
Allerdings habe ich nun das Selbe Problem, wie vorher mit anderen Methoden aus der dll(ich habe auch da das "@Error" beim Aufruf eingefügt).
unit D_Scannen;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; const //DLL´s ct_nativeDLL = '98x_API.dll'; type TDialog_Scannen = class(TForm) FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Dialog_Scannen: TDialog_Scannen; Error: DWORD; //DLL Methoden function Init(Attempts, Timeout: DWORD; Error: LPDWORD): BOOL; stdcall; external ct_nativeDLL name 'Scanner98x_Init'; implementation {$R *.dfm} procedure TDialog_Scannen.FormCreate(Sender: TObject); begin try Init(1, 1000, @Error); except on e: Exception do begin ShowMessage('Fehler in FormCreate(): ' + e.Message); end; end; end; end. Aber bis hier hin: Danke an alle, die geholfen haben!!!:thumb: Ich denke ich werde es jetzt hinbekommen. |
AW: dll in Delphi verwenden
Hallo,
bitte die Error-Variable nicht global in der Unit definieren, lokale reicht doch. Zitat:
Du musst aus den vorgegebene Structs jetzt Records machen, das Alignment beachten und los geht's ;) |
AW: dll in Delphi verwenden
Ich brauch den Error aber später doch ganz oft, in verschiedenen Methoden in der Unit. Oder is das mit Pointern andres:?:
Ich bekomme wieder den Zugriffsverletzungsfehler, den ich vorher schonmal in einem Post im Anhang hatte (dllfehler2). Also ich schätze mal, dass ich irgendwelche Variablen falsch an die Funktion übergebe. Aber das krieg ich schon raus. Wenn nicht, melde ich mich wieder. :-D Zitat:
Was sind denn Structs? Und warum muss ich da Recodrs draus machen? Ich dachte auch immer Alignment hätte nur bei grafischen Komponenten relevanz...? |
AW: dll in Delphi verwenden
Hallo,
Seite 1 Zitat:
so ausrichtet, dass er am schnellsten auf die Elemente zugreifen kann. type TMyRec = record b1: Byte; b2: Byte; end; Mit einem Alignment von 8 Byte sieht das intern so aus: TMyRec = record b1: Byte; bDummy: Byte7; b2: Byte; end; Der Record ist größer, aber auf ganze 8 Byte ist der Zugriff schneller. Das Alignment steht in deiner PDF auf Seite 11. Ich würde zur "Übung" mal mit der Implementierung von Scanner98x_GetAPIVersion beginnen. Laut PDF Seite 13 ist die Signatur void Scanner98x_GetAPIVersion(VERSIONSSTRUCTURE * Version) Es wird also ein Pointer auf einen Record übergeben (oder du schreibst var davor). Und der Record musste so aussehen type TVersionRec = record Version: char[6]; SpecialProgramm: DWORD; end; |
AW: dll in Delphi verwenden
Zitat:
Vielen Dank für die Erklärung:thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 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