![]() |
C++ DLL in Delphi
Hallo,
ich nutze eine C++ DLL in Delphi, um meinen Ausweisdrucker fernzusteuern. In der SDK Beschreibung sind die C++ Funktionen beschrieben. Folgende Funktion funktioniert bspw.: C++ Code
Code:
Parameters:
void ZBRPRNGetSDKVer(int *major,int *minor,int *engLevel)
major [out]pointer to major version number minor [out]pointer to minor version number engLevel [out]pointer to engineering level number In Delphi nutze ich die Funktion dann bspw. so:
Code:
...
procedure ZBRPRNGetSDKVer(major, minor, engLevel: PInteger); stdcall; external 'ZBRPrinter.dll'; ... procedure TForm2.btnSDKClick(Sender: TObject); var major, minor, engLevel: PInteger; a, b, c: integer; begin major := @a; minor := @b; engLevel := @c; ZBRPRNGetSDKVsn(major,minor,engLevel); end; Aber folgendes funktioniert nicht: C++ Code
Code:
Parameters:
int ZBRGetHandle(HANDLE *hPrinter,char *printerName,int *printerType,int *err)
hPrinter [out]pointer to returned printer driver handle printerName [in] pointer to printer driver name printerType [out]pointer to returned printer type value, err [out]pointer to returned error code Return Value: TRUE successful FALSE failed In Delphi:
Code:
Kann mir jemand bitte erklären, warum ich da immer den Fehlercode (in @err) zurückbekomme, dass er den Handle auf den Drucker nicht hinbekommt? Was mache ich falsch? Der Drucker heißt definitiv so.
...
function ZBRGetHandle(hPrinter: Phandle; printername: PChar;printerType, err: PInteger): Boolean; stdcall; external 'ZBRPrinter.dll'; ... procedure TForm2.btnSDKClick(Sender: TObject); var hPrinter: Phandle; printerType, err: PInteger; printerName: Pchar; begin printerName := 'Zebra P430i Card Printer USB'; ZBRGetHandle(@hPrinter, printername , @printerType, @err) end; Wäre nett, wenn mir jemand weiterhelfen könnte, vielen Dank. Gruß mc |
AW: C++ DLL in Delphi
@PHandle => Pointer auf Pointer. Klappt es, wenn Du das @ stehenlässt, aber hPrinter als THandle deklarierst? Übrigens musst DU AFAIK nicht alle Parameter als Pointer deklarieren, es müsste doch auch genügen, diese als Var-Parameter zu übergeben, oder irre ich mich?
|
AW: C++ DLL in Delphi
Danke für die Antwort.
Wenn ich es so deklariere:
Code:
und dann so aufrufe:
function ZBRGetHandle(var hPrinter: THandle; var printername: PChar; var printerType; var err: PInteger): boolean; stdcall; external 'ZBRPrinter.dll';
Code:
Kommt ein Fehlercode heraus, der nicht existiert... Noch ne Idee evtl. :)?
ZBRGetHandle(hPrinter, printername , printerType, err)
|
AW: C++ DLL in Delphi
Nein, ich meinte das so:
Delphi-Quellcode:
function ZBRGetHandle(hPrinter: Phandle; printername: PChar; var printerType, err: Integer): Boolean; stdcall; external 'ZBRPrinter.dll';
... procedure TForm2.btnSDKClick(Sender: TObject); var hPrinter: Thandle; printerType, err: Integer; printerName: Pchar; begin printerName := 'Zebra P430i Card Printer USB'; ZBRGetHandle(@hPrinter, printername , printerType, err) end; |
AW: C++ DLL in Delphi
Bringt mir den gleichen Fehlercode 61, "Unable to open handle to Zebra printer driver"....ich verstehs nicht...
|
AW: C++ DLL in Delphi
sicher dass, das handel stimmt? Haette es ja eher mit cdecl versucht:
Delphi-Quellcode:
procedure ZBRPRNGetSDKVer(out major, minor, engLevel: Integer); cdecl; external 'ZBRPrinter.dll';
function ZBRGetHandle(out hPrinter: THandle; printername: PChar; out printerType, err: Integer): Integer; cdecl; external 'ZBRPrinter.dll'; |
AW: C++ DLL in Delphi
An dem cdecl lags auch nicht.
Ich habe es nun herausgefunden, es lag an der Dokumentation. Die Funktion muss folgendermaßen aussehen:
Code:
Wichtig dabei war, dass printername ein LPSTR ist und nichts anderes. In der Dokumentation steht da nämlich etwas von char....
function ZBRGetHandle(var hPrinter: PHandle; printername: LPSTR; var printerType: Integer; var err: Integer) : Integer;stdcall; external 'ZBRPrinter.dll';
Vielen Dank für eure Antworten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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 by Thomas Breitkreuz