![]() |
Ungültige Gleitkommaoperaion trotz Try Except Block
Liste der Anhänge anzeigen (Anzahl: 1)
Hey Leute, ich steh vor einem Rätsel.
Ich erhalte in meinem Programm eine Exception (ungültige Gleitkommaoperation) obwohl ich den Anweisung, die diese Exception auswirft in einem try..except Block steht. "Bei Sprach-Exceptions benachrichtigen ist schon ausgeschaltet". Auch wenn ich das Programm nicht aus der exe starte kommt die Exception. Dann habe ich zusätzlich MadExcept eingeschaltet, welches ebenfalls trotz try..except anschlägt. Ich habe mal den Screenshot von MadExcept angehängt. Die genaue Zeile in der die Exception ausgeworfen wird, ist ein Aufruf von Chart.Repaint der TeeChart Komponente. Ich hoffe ihr könnt mir helfen, ich komme an dieser Stelle einfach nicht weiter. |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
Hallo Oracle,
zeige doch bitte mal den Code einschließlich des try except Blocks und der Repaint Anweisung. |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
Hier der Ausschnitt an dem das Problem auftritt. Das ganze Programm hat mehrere 10000 Zeilen, so dass ich nicht weiss was ich daraus alles extrahieren soll, um den Fehler besser auffindbar zu machen.
Delphi-Quellcode:
if length(XValues) > 0 then
begin try Chart.Series[0].XValues.Value := TChartValues(XValues); Chart.Series[0].XValues.Count := high(XValues); Chart.Series[0].XValues.Modified := true; Chart.Series[0].YValues.Value := TChartValues(YValues); Chart.Series[0].YValues.Count := high(YValues); Chart.Series[0].YValues.Modified := true; Chart.Repaint; <-- Hier tritt der besagt Fehler auf. except end; |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
Hi,
ich bin mir jetzt nicht ganz sicher, aber ich glaube, dass kommt daher: Ruft eine Methode in einem try/except-Block eine Methode auf, die ihren eigenen Code nicht mittels try/except kapselt, und eine Exception verursacht, so wird diese auch geworfen. Bsp.:
Delphi-Quellcode:
In diesem Beispiel wird glaub ich eine Exception geworfen. Das entspricht deinem Aufruf Repaint. Ich bin mir nur nicht mehr sicher ob das generell so ist oder nur, wenn die aufgerufenen, Exception werfende Methode in einer anderen Unit liegt, die nur noch als dcu dazugelinkt wird.
procedure DoIt;
begin 1000/0; end; procedure TryDoIt; begin try DoIt; except end; end; Gruß Oki |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
Hallo Oki,
eine Exception wird, wenn Sie in einer Methode nicht abgefangen wird, an den Rufer weitergeleitet. Das dürfte also nicht die Ursache sein. |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
Hmm :gruebel: wenn du das sagst, dann glaube ich das auch. Ich kann mich aber duster daran erinnern, dass ich so was auch mal hatte (vor langer Zeit). Kann mich aber nicht mehr genau erinnern was da los war. War aber noch zu D5-Zeiten.
Naja, vielleicht kennt ja noch jemand anderes das Problem und hat eine aktuelle Lösung parat. Und du bist dir sicher, dass es auch nicht mit einer gelinkten dcu ohne try-Block zu tun haben kann? Gruß oki [edit = das gröbste Deutsch korrigiert] |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
Hallo,
was passiert, wenn du folgendes machst
Delphi-Quellcode:
Und dann immer eine Zeile mehr reinbringen
if length(XValues) > 0 then
begin try (* Chart.Series[0].XValues.Value := TChartValues(XValues); Chart.Series[0].XValues.Count := high(XValues); Chart.Series[0].XValues.Modified := true; Chart.Series[0].YValues.Value := TChartValues(YValues); Chart.Series[0].YValues.Count := high(YValues); Chart.Series[0].YValues.Modified := true; *) Chart.Repaint; <-- Hier tritt der besagt Fehler auf. except end; Es könnte aber auch daran liegen, dass Repaint nicht benutzt werden darf (gibt es Invalidate ?) Ausserdem rpüfst du zwar length(XValues), arbeitest aber auch mit YValues. Ich würde mal prüfen, ob die Werte gültig sind. Heiko |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
Was ich noch dazu schreiben sollte ist:
Normalerweise funktioniert der Code reibungslos. Und das schon seit langem. Ich habe hier eine Software mit der ich Geräte anspreche und auslese. Neu ist jetzt: Bisher gab es für unsere verschiedenen Gerätetypen immer eine eigenen Software. Da sich die einzelnen Softwaren (?) untereinander fast komplett gleichten, führe ich jetzt eine Verschlankungskur durch. Nun soll es nur noch eine Software für alle Geräte geben. Das Problem tritt nun an der Stelle auf, wenn ich während die Software läuft das Gerät welches aktuell verwendet wird geändert wird. Beispiel: Software wird mit Gerätetyp 1 gestartet. Während die Software läuft soll die Software auf Gerät 2 überschwenken. Quasi: Gerät 1 deinitialisieren und Gerät 2 initialisieren. Danach Softwareoberfläche entsprechend den Geräteparametern anpassen |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
@hoika
es gibt übrigens auch Chart.Invalidate. Was bedeutet das für mich? Darf ich chart.repaint dann nicht aufrufen? |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
auch wenn man invalidate benutzt und danach alles reibungslos funzt erklärt das noch nicht die Exception im Block. Somit sollte das nach
Zitat:
Gruß oki |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
Hallo,
aha, du stellst also alles auf ein anderes Gerät um, dann kommt die Exception. Das hättest du aber auch gleich sagen können. Bestimmt hängt noch irgendwo was im Speicher, FreeAndNIL statt Free wäre hier gut. Ich würde das Chart in diesem Fall komplett löschen und neue erzeugen. Heiko |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
Da packe ich aber nicht das Übel bei der Wurzel.
Das Gerät wird auf jeden Fall per FreeAndNil zerstört. Der Myteriöse ist auch noch, dass der Fehler nur Auftritt, wenn ich mit Gerät 1 starte und dann auf Gerät 2 uminitialisiere. Starte ich mit Gerät 2 und stelle dann auf Gerät 1 gehts. Dann kann ich auch wieder zurückswitchen auf Gerät 1. Nur bei Start mit Gerät 1 und dann Gerät 2 tritt der Fehler auf. |
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
und wie verhält es sich mit dem Invalidate Aufruf? Wie wird dieser verwendet?
|
Re: Ungültige Gleitkommaoperaion trotz Try Except Block
Hallo,
MadExxept zeigt doch schon etwas in die richtige Richtung, die Aufruf-Reihenfolge ist ja von unten nach oben zu lesen. Ich drehe es mal um InternalDrawLabel TChartAxis.LabelValue // ist wohl ein String-property FormatFloat // Double oder Variant to String Irgendwas haut mit dem LabelValue-Wert bzw. dem internen Wert dieses property nicht hin, oder mit der ChartAxis selber. Das es nur bei einer bestimmten Umstellungs-Reihenfolge passiert, ist kein Zufall, sondern liegt viell. daran, dass die Achsen anders beschriftet sind ? Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 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