Hallo,
ich kann mir es einfach nicht erklären.
In einem Programm will ich einen Hex-String wie folgt in einen Cardinal oder UInt32 konvertieren:
Delphi-Quellcode:
procedure TMyObject.DoIt(data: string);
var
n: Cardinal;
begin
try
n := System.SysUtils.StrToInt('0x' + Data);
except
// tu was
end;
Immer wenn Data FFFFFFFF ist, gibt's einen RangeCheckError.
Schreibe ich jedoch ein Konsolenprogramm, welches genau dasselbe tut
Delphi-Quellcode:
var
n: Cardinal;
begin
try
n := System.SysUtils.StrToInt('0x' + Data);
WriteLn(n);
ReadLn;
except
// tu was
end;
end.
dann wird mir der richtige Wert auf den Bildschirm geschrieben.
So, und bevor ihr mir jetzt mit Compilerschaltern kommt:
ich habe extra im nicht funktionierenden Programm in der
Unit Strg-O-O gedrückt
und alle die darauf an die stelle geschriebenen Einstellungsdefines 1:1 in das
Konsolenprogramm übernommen. Das funktioniert immer noch.
In QP hab' ich keinen bugreport zu StrToInt gefunden.
Also: warum dieses unterschiedlche Verhalten?
In meinem Programm ist n natürlich eine lokale Variable in einer Methode und Data wie
oben auch ein Übergabeparameter (ja noch ohne Const).