Ich habe eine C++ function
:C++ Funktion Delphi XE7
long CSP2_API csp2GetPacket(char szData[], long nBcrNr, long nMaxDataSz)
Parameter sind:
szData: buffer where the barcode data is stored in
nBcrNr: the desired barcode’s index (which starts from 0L)
nMaxDataSz: the maximum size of the szData buffer
Mein Weg des Umgangs mit dieser ist:
type
TBarcode = Array[0..99] of AnsiChar;
function csp2GetPacket(szBarData : TBarCode;
nBarcodeNumber: LongInt;
nMaxLength: LongInt): LongInt cdecl {$IFDEF WIN32}stdcall {$ENDIF}; external 'CSP2.DLL';
und Verwendung genannt. ..
procedure TForm1.Button1Click(Sender: TObject);
var
BarCode : TBarcode;
begin
BarCode := #0;
csp2GetPacket(BarCode,0,SizeOf(BarCode));
end;
Die C++ - Dokumentation bestätigt, dass der Standard ASCII
Text für die Barcodes verwendet wird.
Gibt es einen besseren (korrekteren) Weg, das C++ function
aufzurufen? oder ist das akzeptabel?
@RawN 'AnsiChar' ist immer 1 Byte. Sie denken an Delphi 'Char', das 2 Bytes in D2009 + ist. 'char' in C++ ist immer 1 Byte, also ist' AnsiChar' in Delphi korrekt, * besonders * in D2009 +. –
C++ normalerweise Mangelnamen. Was interessant zu wissen ist, ob dies als "extern" C "erklärt wird oder nicht.Wenn nicht, müssen Sie den richtigen Namen herausfinden. –
@RudyVelthuis CSP2 API ist in C tatsächlich mit Aufrufkonventionen stdcall, nicht C++. Die Namen in der Importbibliothek werden dementsprechend gemangelt (z.B. '_csp2GetPacket @ 12'). Namen in der DLL, die die API bereitstellen, werden nicht gemangelt ('csp2GetPacket') –