AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++ DLL Header -> Delphi

Ein Thema von f.siebler · begonnen am 28. Aug 2007 · letzter Beitrag vom 28. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von f.siebler
f.siebler

Registriert seit: 15. Jan 2007
Ort: Hamburg
170 Beiträge
 
Delphi 2006 Professional
 
#1

C++ DLL Header -> Delphi

  Alt 28. Aug 2007, 11:50
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);
Viele Grüße aus Hamburg
Fabian
sql-praxis.net: sql von der Theorie in die Praxis...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: C++ DLL Header -> Delphi

  Alt 28. Aug 2007, 11:52
an welchem Teil davon scheiterst du? Helfen heißt ja nicht das andere die Arbeit komplett machen sonder einen unterstützen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#3

Re: C++ DLL Header -> Delphi

  Alt 28. Aug 2007, 11:54
Vieleicht so

Delphi-Quellcode:
function GetSerialNumbers(const pbySerialNumbers: PBYTE;
                                const PDWORD pdwSerialNumberLength;
                                const PDWORD pdwNbDevices): DWORD; cdecl; external 'die.dll';
Programmieren ..... .
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: C++ DLL Header -> Delphi

  Alt 28. Aug 2007, 11:57
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:
Each serial number is a DWORD.
pbySerialNumbers can be seen as a array of DWORD (DWORD[])
dann kann man da auch einen anderen Typ nehmen/erstellen welcher eben das bequeme zugreifen erleichtert.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von f.siebler
f.siebler

Registriert seit: 15. Jan 2007
Ort: Hamburg
170 Beiträge
 
Delphi 2006 Professional
 
#5

Re: C++ DLL Header -> Delphi

  Alt 28. Aug 2007, 11:57
Moin,

sorry,

function GetSerialNumbers(pbySerialNumbers : byte; dwSerialNumberLength : DWord; pdwNbDevices : DWord ): DWord; cdecl; external 'BiometricDll.dll'; war der bisherige Code, wollte den Post nicht komplett mit meinen Versuchen zumüllen, mit dem "const" davor werde ich es mal versuchen!
Viele Grüße aus Hamburg
Fabian
sql-praxis.net: sql von der Theorie in die Praxis...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: C++ DLL Header -> Delphi

  Alt 28. Aug 2007, 12:00
war fast richtig
der Stern hinter dem Datentyp bedeutet das es sich um den Pointertyp handelt.
Code:
BYTE *
wäre also ein Pointer auf ein Byte
Delphi-Quellcode:
type
  PByte = ^Byte;
unter Berücksichtigung des Kommentaares wäre aber folgendes das beste:

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';
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#7

Re: C++ DLL Header -> Delphi

  Alt 28. Aug 2007, 12:07
Zitat von SirThornberry:
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.
Ja sorry stimmt schon .. wollte gerade Posten da hattes du vor mir gepostet, und da selbst noch übersetzten übe kamm mir das gelegen ^^.
Programmieren ..... .
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#8

Re: C++ DLL Header -> Delphi

  Alt 28. Aug 2007, 12:07
Zitat von SirThornberry:
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';
Warum nicht
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
const pbySerialNumbers: PDWordArray; ? Was genau ist konstant? In der C-Version sind nämlich in allen drei Fällen nur die Zeiger konstant, nicht jedoch der Inhalt.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von f.siebler
f.siebler

Registriert seit: 15. Jan 2007
Ort: Hamburg
170 Beiträge
 
Delphi 2006 Professional
 
#9

Re: C++ DLL Header -> Delphi

  Alt 28. Aug 2007, 12:14
Das geht bei mir irgendwie nicht, (Er meckert die "pdwSerialNumberLength usw.." an, mit "( erwartet"


Delphi-Quellcode:
function GetSerialNumbers(const pbySerialNumbers: PDWordArray;
                                const PDWORD pdwSerialNumberLength;
                                const PDWORD pdwNbDevices): DWORD; cdecl; external 'die.dll';
aber das geht, klappt der Aufruf der Funktion leider noch nicht. Ich bekomme eine Exception.

Delphi-Quellcode:
function GetSerialNumbers(const pbySerialNumbers: PDWordArray;
                                const pdwSerialNumberLength : PDWORD;
                                const pdwNbDevices : PDWORD): DWORD; cdecl; external 'BiometricDll.dll';
Der Aufruf der Funktion erfolgt so:

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
Viele Grüße aus Hamburg
Fabian
sql-praxis.net: sql von der Theorie in die Praxis...
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: C++ DLL Header -> Delphi

  Alt 28. Aug 2007, 12:21
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);
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz