Aalso:
Ich habe aufgrund der Tipps einiges durchprobiert: der Code sieht so aus (auskommentierte Varianten wurden entsprechend probiert):
Delphi-Quellcode:
class function TdlgKlimaSetup.DateTimeToEdit(value: TDateTime):
String;
var
P: PByte;
//H
i: Integer;
S:
string;
cmp: Double;
//P
w8087: Word;
//N
begin
try
w8087 := Get8087CW();
//N
cmp := 0.1;
//if IsNaN(value) or (CompareDateTime(value, cmp) = LessThanValue) then //K
if value <= cmp
then //P
result := '
'
else
result := DateTimeToStr(value);
except
on E:
Exception do begin //H
P := @value;
for i := 0
to 7
do
try
S := S + IntToHex(P^, 2);
Inc(P);
except
S := S + '
**';
end;
ShowMessage(Format('
ungültige Zahl: "%s" - %s - CW8087=%x', [S, E.
Message, w8087]));
//HN
result := '
';
end;
end;
end;
@Popov:
Auch der Vergleich mit der Variablen hat denselben Effekt. Die Einstellungen sind diese:
A=8 B=0 C=0 D=1 E=0 F=0 G=1 H=1 I=1 J=0 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=0 V=1 W=0 X=1 Y=2 Z=1
@Himitsu:
Der Effekt ist derselbe, die Messagebox hängt als Grafik an
@Klaus:
Auch mit CompareDateTime wird dieselbe
Exception ausgelöst.
@Namenloser:
Das ausgelesene Control Word ist $1372 (habe ich in der Messagebox mit ausgegeben).
Der Assembercode ist als Grafik wiedergegeben (copy/Paste klappt aus dem CPU-Fenster nicht). Ein Einzelschritt über den FLD von der markierten Stelle führt bereits nach "ntdll.KiUserExceptionDispatcher".
Beim Schreiben ist mir noch eine weitere Idee gekommen:
An den Anfang des Codes habe ich folgendes eingefügt:
Delphi-Quellcode:
cmp := 0.1;
Try
if cmp < 0 then
cmp := 0.2;
except
ShowMessage('Totaler Unsinn');
end;
Damit erscheint diese Message-Box, aber der übrige Code läuft dann ohne
Exception durch.
Jetzt hoffe ich noch, dass das CW etwas Hilfreiches aussagt.