![]() |
C++ DLL Header -> Delphi
Moin Moin,
vll. bin ich heute morgen noch nicht ganz wach, aber irgenwie bekomme ich es nicht gebacken C++ Header Files nach Delphi zu übersetzten...... Anbei der Ausschnitt aus dem Header File. Es wäre total super, wenn mir da jemand helfen könnte :-) Besten Dank Fabian
Delphi-Quellcode:
#ifndef _biometricdll_h #define _biometricdll_h #define DLLIMPORT extern "C" __declspec(dllimport) //$e----------------------------------------------------------------------------------------------- // @GetSerialNumbers // // Function : Lists all biometric devices plugged in the station. // Reads all the serial numbers. // // Inputs : pdwSerialNumberLength points to the buffer pbySerialNumbers total length. // // Outputs : pbySerialNumbers points to the serial numbers // pdwNbDevices points to the number of detected devices. // // Returns : RCDone if the reading of all device serial numbers succeeded. // RCFailed if the operation failed. // RCNoDevice if there is no device. // RCOpenFailed if there is a problem while opening the device. // RCAllocationFailed if a dynamic allocation failed (lack of memory resource). // // Info : Each serial number is a DWORD. // pbySerialNumbers can be seen as a array of DWORD (DWORD[]). // If you cast ( (DWORD*) ) pbySerialNumbers, you will obtain the same serial // number as the one printed on the lower part of device (Sn : xxxxxxxx). //$e----------------------------------------------------------------------------------------------- DLLIMPORT DWORD GetSerialNumbers(BYTE * const pbySerialNumbers, DWORD * const pdwSerialNumberLength, DWORD * const pdwNbDevices); |
Re: C++ DLL Header -> Delphi
an welchem Teil davon scheiterst du? Helfen heißt ja nicht das andere die Arbeit komplett machen sonder einen unterstützen.
|
Re: C++ DLL Header -> Delphi
Vieleicht so ;-)
Delphi-Quellcode:
function GetSerialNumbers(const pbySerialNumbers: PBYTE;
const PDWORD pdwSerialNumberLength; const PDWORD pdwNbDevices): DWORD; cdecl; external 'die.dll'; |
Re: C++ DLL Header -> Delphi
jetzt hat er zwar seine Lösung (zwar nicht die Optimale) aber richtig viel lernt man nicht wenn man einfach die Komplettlösung bekommt ohne Erklärung.
Wenn man folgendes beachtet: Zitat:
|
Re: C++ DLL Header -> Delphi
Moin,
sorry,
Delphi-Quellcode:
war der bisherige Code, wollte den Post nicht komplett mit meinen Versuchen zumüllen, mit dem "const" davor werde ich es mal versuchen! :-)
function GetSerialNumbers(pbySerialNumbers : byte; dwSerialNumberLength : DWord; pdwNbDevices : DWord ): DWord; cdecl; external 'BiometricDll.dll';
|
Re: C++ DLL Header -> Delphi
war fast richtig :)
der Stern hinter dem Datentyp bedeutet das es sich um den Pointertyp handelt.
Code:
wäre also ein Pointer auf ein Byte
BYTE *
Delphi-Quellcode:
unter Berücksichtigung des Kommentaares wäre aber folgendes das beste:
type
PByte = ^Byte;
Delphi-Quellcode:
type
TDWordArray = Array[0..0] of DWORD; PDWordArray = ^TDWordArray; [...] function GetSerialNumbers(const pbySerialNumbers: PDWordArray; const PDWORD pdwSerialNumberLength; const PDWORD pdwNbDevices): DWORD; cdecl; external 'die.dll'; |
Re: C++ DLL Header -> Delphi
Zitat:
|
Re: C++ DLL Header -> Delphi
Zitat:
Delphi-Quellcode:
?
function GetSerialNumbers(const pbySerialNumbers: PDWordArray;
var pdwSerialNumberLength: DWORD; var pdwNbDevices: DWORD): DWORD; cdecl; external 'die.dll'; Edit: Oh, und noch eine Nachfrage in eigener Sache. Was bedeutet
Delphi-Quellcode:
? Was genau ist konstant? In der C-Version sind nämlich in allen drei Fällen nur die Zeiger konstant, nicht jedoch der Inhalt.
const pbySerialNumbers: PDWordArray;
|
Re: C++ DLL Header -> Delphi
Das geht bei mir irgendwie nicht, (Er meckert die "pdwSerialNumberLength usw.." an, mit "( erwartet"
Delphi-Quellcode:
aber das geht, klappt der Aufruf der Funktion leider noch nicht. Ich bekomme eine Exception.
function GetSerialNumbers(const pbySerialNumbers: PDWordArray;
const PDWORD pdwSerialNumberLength; const PDWORD pdwNbDevices): DWORD; cdecl; external 'die.dll';
Delphi-Quellcode:
Der Aufruf der Funktion erfolgt so:
function GetSerialNumbers(const pbySerialNumbers: PDWordArray;
const pdwSerialNumberLength : PDWORD; const pdwNbDevices : PDWORD): DWORD; cdecl; external 'BiometricDll.dll';
Delphi-Quellcode:
var
pdwSerialNumberLength, pdwNbDevices : PDWord; pbySerialNumbers : PDWordArray; res : Dword; begin res := GetSerialNumbers(pbySerialNumbers, pdwSerialNumberLength, pdwNbDevices); end habe ich da jetzt irgendwas falsch verstanden? Ich steh leider irgendwie noch aufm schlauch... denn die anderen ca. 30 funktionen wollte ich später noch übersetzten ohne euch damit zu nerven :-) |
Re: C++ DLL Header -> Delphi
Also die C-Deklaration der Funktion ist selten daemlich. "BYTE * const pbySerialNumbers" wird beschrieben als Zeiger auf DWORDs. Warum ist er dann nicht genau so deklariert? Die const-Angabe bei den Zeigern bedeutet das der Zeiger innerhalb der Funktion nicht veraendert werden kann, die Daten auf die er zeigt schon.
Delphi-Quellcode:
// pbySerialNumbers so deklarieren wie es der Kommentar sagt
function GetSerialNumbers(pbySerialNumbers: PDWORD; // hier funktioniert var am besten, auch wenn der Wert dem Kommentar nach nicht veraendert wird (noch so ein dummer Fehler, die Funktion koennte hier einen zu kleinen Puffer signalisieren) var dwSerialNumberLength: DWORD; // eindeutig ein Output-Parameter den man mit var oder out deklariert) var dwNbDevices: DWORD): DWORD; cdecl; external 'die.dll'; var Serials: array [0..79] of DWORD; LenSerials: DWORD; NumDevices: DWORD; begin LenSerials := 80; NumDevices := 0; GetSerialNumbers(@[Serials[0], LenSerials, NumDevices); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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