Hello, Usually when we work with PChars we do things like this to set the final terminator:
var ansistr: ansistring; begin // Copy the originating string taking into account the specified length SetLength(ansistr, len+1); System.Move(source^, ansistr[1], len); ansistr[len+1] := #0; SetLength(ansistr, len); And it works fine. You get a string with correct length and a final #0 terminator. Now, I simply tryed the same code for a unicodestring, and it corrupts my stack: procedure Unicode2AnsiMove(source:pwidechar;var dest:ansistring;len:SizeInt); var widestr: unicodestring; begin {$ifdef PASWSTRING_VERBOSE}WriteLn('Unicode2AnsiMove START');{$endif} // Copy the originating string taking into account the specified length SetLength(widestr, len+1); System.Move(source^, widestr[1], len*2); PWideChar(@widestr)[len] := #0; // <--- This corrupts the stack SetLength(widestr, len); I already fixed the problem by simply not setting this last widechar to #0, but now I got puzzled: Any ideas why this doesn't work? It crashes only a bit after this procedure, but I found that this was the statement which caused the problem. -- Felipe Monteiro de Carvalho _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal