Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Problem mit PAnsiChar und Rückgabewert einer Funktion CryptoSys PKI

  Alt 7. Sep 2015, 15:38
Ich hab dann auch nochmal geschaut und was sehen wir?
Delphi-Quellcode:
function CMS_ReadSigDataToString(
  szDataOut:Pchar;
  nDataOutLen:longint;
  szFileIn:Pchar;
  nOptions:longint):longint;cdecl;
  external External_library name 'CMS_ReadSigDataToString';
Also doch ein Pointer. Dass es mit AnsiString funktioniert ist eher Zufall.

Ach ja, das mit dem PChar haben die auch nicht verstanden.
Zitat:
Strings and byte arrays that receive output need to be pre-dimensioned to the correct length before calling a DLL function. Then pass a Pointer as the parameter.
Delphi-Quellcode:
buf : AnsiString;
//...
buf := AnsiString(StringOfChar(#0,nchars));
ret := FOO_StringFunction(Pointer(buf), nchars, ...);
arrbytes : Array of Byte;
//...
SetLength(arrbytes, nbytes);
ret := FOO_ByteFunction(Pointer(arrbytes), nbytes, ...);
These output parameters are expected as PChar PAnsiChar and PByte respectively. [PChar also seemed to work OK for us in early tests and the compiler didn't complain either].
Und nun reservierst du Speicher um diesen in einen anderen Bereich zu kopieren und dann den reservierten wieder zu verwerfen. Gut, das kann man machen, muss man aber nicht.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 7. Sep 2015 um 15:40 Uhr)
  Mit Zitat antworten Zitat