![]() |
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:
verbaut.
raise Exception.Create('Fehler');
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? |
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) |
AW: Kein Raise unter 64bit?
Hallo,
Vielen Dank für die Antwort. Ich habe im FormCreate meiner Appliktion folgendes gesetzt:
Delphi-Quellcode:
Wenn ich diese Anwendung unter 32bit kompiliere, funktioniert es so, wie ich erwarte:
Application.OnException := errMain.WriteException;
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 |
AW: Kein Raise unter 64bit?
Zitat:
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. |
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. |
AW: Kein Raise unter 64bit?
Vielleicht verhält sich ja die Prozedur unter 64 bit anders und erreicht die betreffende Stelle gar nicht?
|
AW: Kein Raise unter 64bit?
Zitat:
|
AW: Kein Raise unter 64bit?
Stimmt. Mein Fehler. :mrgreen:
|
AW: Kein Raise unter 64bit?
Zitat:
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. |
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. |
AW: Kein Raise unter 64bit?
Man ist als Developer ja nicht immer auf allen Feldern auf "Profi" Niveau. Zum Beispiel befinde ich mich bei der Konvertierung von 32 nach 64bit noch in der Anfangsphase.
Deswegen hatte ich gehofft wäre das für einen Profi vielleicht ein triviales Problem, der dann sowas sagt wie "achja, bei 64bit muss man auf dies und dies achten" und damit wäre das Problem gelößt. |
AW: Kein Raise unter 64bit?
Einen besseren Profi als Stevie wirst du kaum finden, der wühlt so richtig tief durch den Delphi-Dschungel.
Stevie sagt nein -> also gib uns ein Beispiel, sonst bleibt es beim Nein. |
AW: Kein Raise unter 64bit?
Die Software ist leider sehr umfangreich. Einfache Beispiele, die ich versucht habe, haben wunderbar funktioniert.
Ich werde es morgen mit VCL Source mal debuggen um zu sehen was nach dem Raise passiert oder mal TApplicationEvents ausprobieren. In der Anwendung funktioniert es ja an manchen Stellen, nicht an allen. Dann hatte ich auch schon Threads (wir nutzen an der Stelle keine Threads, aber vielleicht macht ja irgendein Subprozess etwas) im Auge. Allerdings funktioniert es unter 32bit ja. Ich werde berichten wenn ich etwas finde, das Problem verfolgt uns schon seit einem halben Jahr. |
AW: Kein Raise unter 64bit?
Zitat:
Nun ja, wir müssen schon gucken, dass wir alle Infos haben, um die Frage zu beantworten. Im Eingangspost schreibst du (Markierungen durch mich): Zitat:
Sorry, wieder nur mehr Fragen, als Antworten. ;) Zitat:
|
AW: Kein Raise unter 64bit?
@Stevie
Geht es uns nicht allen so ;) @OlliWW Ich an deiner Stelle würde in dem eigenen Code mal nach dem Wort "except" suchen, womöglich gibt es da solche exceptionphobe Konstrukte wie
Delphi-Quellcode:
:wink: (womöglich per Compilerschalter nur bei x64 aktiv)
try
... except end; |
AW: Kein Raise unter 64bit?
Hallo,
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. Dann bitte ein Minimalbeispiel mit einer verschachtelten Prozedur. Heiko |
AW: Kein Raise unter 64bit?
Einen Unterschied gibt es zwischen 32 und 64 Bit Exceptions:
Unter 64 Bit gibt es ein Limit von geschachtelten Exception. Bei mehr als 16 nested Exceptions gibt es ein Runtime error 231. |
AW: Kein Raise unter 64bit?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:43 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