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)