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 Kein Raise unter 64bit? (https://www.delphipraxis.net/185802-kein-raise-unter-64bit.html)

OlliWW 7. Jul 2015 13:47

Delphi-Version: XE6

Kein Raise unter 64bit?
 
Hallo,

Ich habe meine Anwendung von 32bit nach 64bit portiert. An einigen Stellen habe ich ein:
Delphi-Quellcode:
raise Exception.Create('Fehler');
verbaut.

Unter 32bit wird die Anwendung an diesen Stellen, wie gewünscht, beendet. Unter 64bit wird die Procedur an dieser Stelle zwar abgebrochen, das Programm läuft allerdings weiter ohne auch nur eine Meldung anzuzeigen. Dies führt natürlich zu "lustigen" Folgefehlern.

Ich habe gelesen, dass unter 64bit das Exception Handling wohl umgeschrieben worden ist, allerdings konnte ich nirgendwo ein schönes Beispiel finden, wie man nun ein "raise" oder ähnliches implementiert.

Könnt ihr mir da irgendwie weiterhelfen?

Stevie 7. Jul 2015 16:04

AW: Kein Raise unter 64bit?
 
Exceptions raisen funzt unter 64bit genauso wie unter 32. Der Code ist also korrekt.

Meinst du mit Meldung möglicherweise den Dialog/Breakpoint beim Debuggen? Das ist eine Einstellung (unter Debugger Options->Embarcadero Debuggers->Language Exceptions)

OlliWW 8. Jul 2015 14:58

AW: Kein Raise unter 64bit?
 
Hallo,

Vielen Dank für die Antwort.

Ich habe im FormCreate meiner Appliktion folgendes gesetzt:
Delphi-Quellcode:
  Application.OnException := errMain.WriteException;
Wenn ich diese Anwendung unter 32bit kompiliere, funktioniert es so, wie ich erwarte:
Bei einem Raise wird der Code der Funktion "WriteException" ausgeführt.

Wenn ich den gleichen Code mit 64bit kompiliere wird diese Zuweisung offenbar einfach ignoriert.

Edit:
Ich habe noch etwas probiert:
Ich habe ein Raise hinter einen Button gelegt, das beim OnClick läuft. => Das funktioniert unter 64 bit
Dann habe ich ein Raise in dem Aufruf einer Funktion, einer Procedure, einer Funktion (also etwas verschachteltes) => Das funktioniert nicht

Stevie 8. Jul 2015 15:50

AW: Kein Raise unter 64bit?
 
Zitat:

Zitat von OlliWW (Beitrag 1308093)
Das funktioniert unter 64 bit
...
Das funktioniert nicht

Was funktioniert (nicht)? Das raisen der Exception (Debugger laufen lassen, Exception Dialog kommt) oder das Abarbeiten des OnException handlers.
Das sind nämlich 2 verschiedene Paar Schuhe. Dass das raise an sich nicht funktioniert, möchte ich stark bezweifeln.
Was hingegen aus verschiedenen Gründen den Dienst versagen kann, ist dass der Handler bearbeitet wird.

Generell wär es ziemlich zielführend, wenn du ein Beispiel bereitstellst, wo man das von dir beschriebene Verhalten nachstellen kann.

OlliWW 8. Jul 2015 16:14

AW: Kein Raise unter 64bit?
 
Der Aufruf des Handlers "OnException" funktioniert unter 32bit unter 64bit nicht.

Ein Beispiel ist schwer, wie gesagt, rein oberflächlich funktioniert es ja. Baue ich ein Raise im OnClick ein (zum Beispiel) läuft der Handler. In einer verschachtelten Prozedur nicht.

vagtler 8. Jul 2015 17:13

AW: Kein Raise unter 64bit?
 
Vielleicht verhält sich ja die Prozedur unter 64 bit anders und erreicht die betreffende Stelle gar nicht?

Stevie 8. Jul 2015 19:06

AW: Kein Raise unter 64bit?
 
Zitat:

Zitat von vagtler (Beitrag 1308104)
Vielleicht verhält sich ja die Prozedur unter 64 bit anders und erreicht die betreffende Stelle gar nicht?

Das dachte ich mir auch als allererstes. Aber das wird er ja mit dem Debugger oder Logging bestimmt getestet haben... :roll: :stupid: /ironie

vagtler 8. Jul 2015 20:37

AW: Kein Raise unter 64bit?
 
Stimmt. Mein Fehler. :mrgreen:

OlliWW 8. Jul 2015 22:26

AW: Kein Raise unter 64bit?
 
Zitat:

Zitat von Stevie (Beitrag 1308114)
Zitat:

Zitat von vagtler (Beitrag 1308104)
Vielleicht verhält sich ja die Prozedur unter 64 bit anders und erreicht die betreffende Stelle gar nicht?

Das dachte ich mir auch als allererstes. Aber das wird er ja mit dem Debugger oder Logging bestimmt getestet haben... :roll: :stupid: /ironie

Richtig...
schade ich dachte ich bekomme hier konstruktive Hilfe :roll:

Allerdings wo soll ich da noch groß debuggen:
Es gibt ein: Application.OnException = handler <= diese Zuweisung wird erreicht
und dann gibt es ein Raise <= diese Stelle wird erreicht
Und der Breakpoint an der ersten Zeile des Handler läuft schon nicht

Also die Antwort lautet: Ja unter 64bit Verhält sich das Programm anders.

Sir Rufo 8. Jul 2015 22:40

AW: Kein Raise unter 64bit?
 
Natürlich bekommst du konstruktive Hilfe ... wenn du uns ein SSCCE zur Verfügung stellst.

Oder erwartest du, das wir uns jetzt stundenlang so lange etwas zusammen basteln, bis wir evtl. oder auch nicht dein Problem nachstellen können?

Wenn ja, dann hast du in der falschen Rubrik geschrieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 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