Felipe Monteiro de Carvalho wrote:
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);
.....
First question, why is the copying needed ?
Why isn't lpStrFile := PWChar(FileNameWide);
simply enough ?
IMO, you're copying way to much.
Marc
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal