![]() |
NaN unter Windows XP mit XE4 compiliert
Ich habe etwas kurioses.
folgendes : b ist Numeric(10,5)
Code:
In b steht NULL.
select b from tabelle
Code:
Verhalten von einem XE4 übersetzen Programm
var b:real;
begin . . b := myquery.fieldbyname('b').asfloat; . . Windows 7 und höher - b = 0 Windows XP - b = NaN Das könnte man zwar abfangen mit
Code:
aber ich portiere gerade mehrere hunderttausend Zeilen Code.
select coalesce(b,0) from tabelle
Und wenn das select lautet
Code:
, dann habe ich ein Problem.
select * from tabelle
Mal abgesehen davon das dies ein Tretminenfeld wird. Interessant ist auch das dies nur beim ersten Abruf des SQL Befehls passiert. Wiederhole ich diesen Befehl sind die Zahlen korrekt. d.h b = 0 Jemand darüber schon einmal gestolpert und/oder hat eine Lösung dafür? |
AW: NaN unter Windows XP mit XE4 compiliert
Teste doch zur Sicherheit mal in einer XP-VM um auszuschließen dass es an der Windows-Version selbst liegt.
Gab es früher nicht gerne HP-Druckertreiber (oder sowas) die jeder Anwendung die FPU-Flags modifizierten? Delphi-Anwendungen mit ihren eher unkonventionellen FPU-Flags bekamen dadurch Probleme... |
AW: NaN unter Windows XP mit XE4 compiliert
Vielleicht erst mal feststellen, wo genau der Korken sitzt: im Datenbankclient, der Zugriffskomponente, oder in der Delphi-Runtime.
|
AW: NaN unter Windows XP mit XE4 compiliert
Problem gefunden.
Die Variable wurde per VAR einer Funktion übergeben und dort nie initialisiert. Kollege wurde gerade auf dem Hof gesteinigt ;-) |
AW: NaN unter Windows XP mit XE4 compiliert
Nur so nebenbei: Wieso real?
Delphi-Quellcode:
var b:real;
|
AW: NaN unter Windows XP mit XE4 compiliert
Eigentlich verhält sich dein Programm unter XP jetzt korrekt.
NULL != 0 Hintergrund wird sein das ab Vista der Desktop von Windows in einem beschleunigten Modus (DirectDraw) läuft und hierfür die Exception-Mask der FPU standardmäßig anders eingestellt sind das sollte NAN-Exception einfach als O-Werte zurückgeliefert werden. |
AW: NaN unter Windows XP mit XE4 compiliert
Zitat:
|
AW: NaN unter Windows XP mit XE4 compiliert
Zitat:
|
AW: NaN unter Windows XP mit XE4 compiliert
der Code ist paar Jahr alt und kommt noch aus Delphi 4 teilweise. Wurde damals alles mit real gemacht.
|
AW: NaN unter Windows XP mit XE4 compiliert
Zitat:
Können wir das irgendwie nachstellen? Welche Drittanbieter-Abhängigkeiten haben wir hier durch den Datenbank-Zugriff? |
AW: NaN unter Windows XP mit XE4 compiliert
Wie oben geschrieben.
Der Zugriff auf die Datenbank war wohl gar nicht das Problem, sondern das die Variable nur deklariert, aber nicht initialisiert war. Ich hatte den Quellcode etwas simplifiziert. Es war eigentlich eine Schleife in der Stand noch
Code:
Der Code ist alt und ich portiere momentan von Delphi6 auf XE4 die Programme. Da stolpere ich über Haufenweise solche Dinge.
b := b + q.fieldbyname('b').asfloat;
Die Programm sind mehre Tausend Zeilen und davon fast 100 Programme. Jede Zeile im Detail kann ich nicht prüfen. Vor allem wenn durch 3 proceduren eine Variable mit var weitergegeben wird :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz