Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler bei extended-Variablen (https://www.delphipraxis.net/30816-fehler-bei-extended-variablen.html)

ECHTERNMM 29. Sep 2004 18:06


Fehler bei extended-Variablen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

auf bestimmten Rechnern wird die einer extended-Variablen zugewiesene Zahl 123451234512345123 durch VAL -> STR in 123451234512345114 umgewandelt.
Ich habe zur Illustration ein Codebeispiel beigefügt.

Es ist mir Delphi 6 Pro UP2 Build 6.240 mit den RTL-Updates 1, 2 und 3 übersetzt.

Wie gesagt: auf manchen Rechnern tritt der Effekt nicht auf.
Es scheint aber nicht am System selbst zu liegen, da es Rechner mit Win2000Pro SP4 gibt, auf denen der Effekt auftritt und solche -ebenfalls Win2000ProSP4- bei denen er nicht auftritt. Es gibt WinXP SP1 Rechner ohne Effekt - ob mit Effekt konnte ich noch nicht feststellen.

Mit Delphi 1 tritt der Effekt übrigens auch auf "schlechten" Rechnern nicht auf!
(siehe Unterverzeichnis 16).

Bin etwas ratlos: woran mag das liegen??

Gruß
nmm

dizzy 29. Sep 2004 18:10

Re: Fehler bei extended-Variablen
 
http://www.delphipraxis.net/internal...ct.php?t=34532
26. Beitrag von oben ;)

Wird vermutlich an variierendem Umgang bei den Umrechnungen bei den verschiedenen CPUs liegen.


öööhm, und
:dp: Herzlich wilkommen in der DP :dp:

Dax 29. Sep 2004 18:11

Re: Fehler bei extended-Variablen
 
In der OH steht, Extended sei Plattformabhängig, vielleicht ist es das.

dizzy 29. Sep 2004 18:12

Re: Fehler bei extended-Variablen
 
Zitat:

Zitat von Dax
Plattforumabhängig

:mrgreen:

ECHTERNMM 1. Okt 2004 15:40

Re: Fehler bei extended-Variablen
 
Hi,

zunächst Danke für die Hinweise. Aber das Problem hat nichts mit den üblichen Flouting-point Fehlern zu tun.
Auch mit der Plattform hat es nichts zu tun: ich sagt ja bereits, daß sich ein und dieselbe EXE-Datei auf verschiedenen Win2000Pro SP4 Rechner unterschiedlich verhält-die "Plattform" ist j :warn: :warn: a dann wohl dieselbe...

Ich habe einen reproduzierbaren Anhaltspunkt für das oben beschriebene Verhalten ausfindig gemacht:
Immer wenn das Programm i64ext.exe die Datei msvcrt.dll läd, kommte zu der fehlerhaften Berechnung.
Das Progrqamm i63ext.exe läd die DLL natürlich nicht explizit, aber anscheinend gibt es hook-DLL's, die nach einem mir nicht bekannten Verfahren hinzugeladen werden. Diese laden dann msvcrt.dll nach.
Beispiel: winvnc
oder CTHELPER (Ein Programm von Creative Technology Ltd, das irgendwie zu den Soundblaster-Treibern gehört).

Folgendes ist reproduzierbar:
Auf Rechner A läuft der VNC-Server, auf Rechner B der VNC-viewer.
Sind die Rechner nicht verbunden, funktioniert i63ext.exe auf Rechner A. Verbindet man sich von B aus mit A, dann zeigt das Programm diesen Unsinn 123451234512345114 statt 123451234512345123) an.
Kappt man die Verbindung und startet das Programm auf A neu, so ist wieder alles OK.
Ich habe mit dem schönen Programm Process Explorer 8.2 von sysinternals jeweils nachgesehen, welche DLL's das Programm geladen hatte. Immer wenn msvcrt.dll geladen ist, funktioniert VAL->STR nur mit 16-stelliger Genauigkeit, ist es nicht geladen, ist alles OK.

Ahso: Ab und B sind beides Win2000Pro SP4 Rechner. Die Version von MSVCRT.DLL ist (auf beiden Rechnern) 6.01.9844.0000.


Fällt jemandem etwas dazu ein??

Gruß
nmm

ECHTERNMM 2. Okt 2004 01:54

Re: Fehler bei extended-Variablen
 
Hi, ich weiß jetzt, was es war/ist:
Es ist ein Bug in msvcrt.dll. Diese DLL (in älteren Versionen <7.x) schaltet automatisch die FPU in den 64-Bit flotingpoint-Mode.
In Delphi kann man das rückgängig machen mittels

SetPrecisionMode(pmExtended);

(unit math).

Unter XP besteht der Bug nicht mher.

Gruß
nmm


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz