AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kein Raise unter 64bit?

Ein Thema von OlliWW · begonnen am 7. Jul 2015 · letzter Beitrag vom 9. Jul 2015
Antwort Antwort
Seite 1 von 2  1 2      
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#1

Kein Raise unter 64bit?

  Alt 7. Jul 2015, 14:47
Delphi-Version: XE6
Hallo,

Ich habe meine Anwendung von 32bit nach 64bit portiert. An einigen Stellen habe ich ein:
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?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Kein Raise unter 64bit?

  Alt 7. Jul 2015, 17:04
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)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#3

AW: Kein Raise unter 64bit?

  Alt 8. Jul 2015, 15:58
Hallo,

Vielen Dank für die Antwort.

Ich habe im FormCreate meiner Appliktion folgendes gesetzt:
  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

Geändert von OlliWW ( 8. Jul 2015 um 16:07 Uhr) Grund: neue infos
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Kein Raise unter 64bit?

  Alt 8. Jul 2015, 16:50
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#5

AW: Kein Raise unter 64bit?

  Alt 8. Jul 2015, 17:14
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.
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Kein Raise unter 64bit?

  Alt 8. Jul 2015, 18:13
Vielleicht verhält sich ja die Prozedur unter 64 bit anders und erreicht die betreffende Stelle gar nicht?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Kein Raise unter 64bit?

  Alt 8. Jul 2015, 20:06
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... /ironie
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#8

AW: Kein Raise unter 64bit?

  Alt 8. Jul 2015, 21:37
Stimmt. Mein Fehler.
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#9

AW: Kein Raise unter 64bit?

  Alt 8. Jul 2015, 23:26
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... /ironie
Richtig...
schade ich dachte ich bekomme hier konstruktive Hilfe

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.

Geändert von OlliWW ( 8. Jul 2015 um 23:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Kein Raise unter 64bit?

  Alt 8. Jul 2015, 23:40
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 8. Jul 2015 um 23:43 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 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