Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ungültige Gleitkommaoperaion trotz Try Except Block (https://www.delphipraxis.net/146142-ungueltige-gleitkommaoperaion-trotz-try-except-block.html)

Oracle 14. Jan 2010 10:23


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.

MrSpock 14. Jan 2010 10:53

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.

Oracle 14. Jan 2010 11:29

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;

oki 14. Jan 2010 12:08

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:
procedure DoIt;
begin
  1000/0;
end;

procedure TryDoIt;
begin
  try
    DoIt;
  except end;
end;
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.

Gruß Oki

MrSpock 14. Jan 2010 12:30

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.

oki 14. Jan 2010 12:39

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]

hoika 14. Jan 2010 13:04

Re: Ungültige Gleitkommaoperaion trotz Try Except Block
 
Hallo,

was passiert,
wenn du folgendes machst

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;
Und dann immer eine Zeile mehr reinbringen

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

Oracle 14. Jan 2010 13:25

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

Oracle 14. Jan 2010 13:42

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?

oki 14. Jan 2010 14:16

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:

Zitat von MrSpock
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.

doch gar nicht passieren.

Gruß oki


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 Uhr.
Seite 1 von 2  1 2      

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