Das Eingangsbeispiel ist wohl etwas zu knapp ausgefallen ist. Hier ein etwas längeres, das die Problematik (hoffentlich) besser verdeutlicht:
Delphi-Quellcode:
program project1;
{$MODE DELPHI}
uses Classes, SysUtils, CustApp, Windows, IniFiles;
type
TMyApplication = class(TCustomApplication)
private
FStr: WideString;
FValue: WideString;
FFileName: WideString;
[...]
end;
procedure TMyApplication.DoRun;
begin
[...]
FFileName:= 'C:\irgendeine.ini';
FIni:= TIniFile.Create(FFileName); // <--
try
FValue:= FIni.ReadString('foo', 'bar', 'blub'); // <--
SetLength(FStr, 32768);
SetLength(FStr, ExpandEnvironmentStringsW(PWideChar(FValue), @FStr[1], Length(FStr))-1);
finally
FIni.Free;
end;
WriteLn(FStr);
ReadLn;
end;
Die markierten Zeilen werfen folgende Warnungen:
Code:
Compile Project, Mode: Debug, Target: project1.exe: Success, Warnings: 2
project1.lpr(55,35) Warning: Implicit string type conversion with potential data loss from "WideString" to "AnsiString"
project1.lpr(57,18) Warning: Implicit string type conversion from "AnsiString" to "WideString"
Das heißt, selbst wenn ich explizit WideString nutze, renne ich gegen eine andere Wand. Das muss doch besser gehen.
Grüße
Dalai