Hello, In a LCL code we have:
var FileNameBuffer: PChar; FileNameWide: WideString; FileNameWideBuffer: PWideChar; FilterBuffer: WideString; begin {$ifdef WindowsUnicodeSupport} if UnicodeEnabledOS then FileNameWideBuffer := AllocMem(FileNameBufferLen * 2 + 2) else FileNameBuffer := AllocMem(FileNameBufferLen + 1); {$else} FileNameBuffer := AllocMem(FileNameBufferLen + 1); {$endif} ..... {$ifdef WindowsUnicodeSupport} if UnicodeEnabledOS then begin FileNameWide := UTF8Decode(FileName); { StrLCopy is a PChar function, so it won't create a proper 2-byte sized ending and we ensure that it's there by cleaning the string } FillChar(FileNameWideBuffer^, FileNameBufferLen * 2 + 2, #0); StrLCopy(PChar(FileNameWideBuffer), PChar(PWideChar(FileNameWide)), FileNameBufferLen * 2); end else StrLCopy(FileNameBuffer, PChar(UTF8ToAnsi(FileName)), FileNameBufferLen); {$else} StrLCopy(FileNameBuffer, PChar(FileName), FileNameBufferLen); {$endif} ... {$ifdef WindowsUnicodeSupport} if UnicodeEnabledOS then begin lpStrFile := PChar(FileNameWideBuffer); ..... Which doesn't work. FileName can be, for example: C:\Programs\file.txt And then the dialog will show only C, as if it would show only the first letter. The original code uses StrLCopy to copy a PChar with a maximal length. I tryed to manually build a StrLCopy for PWideChar, but it would crash, so I then tryed to improvise an way to use StrLCopy with PWideChar strings In fact, there are lot's of places on LCL where the helper PChar functions are used. Are there PWideChar equivalents??? It really get's much harder to use PWideChar strings without those helper functions. thanks, -- Felipe Monteiro de Carvalho _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal