![]() |
In nonVCL Fehler / Exceptions abfangen ?
Hi,
ich schon wieder. :stupid: da ich einem undefinierbarem Fehler auf der Spur bin, habe ich mir gedacht man könne ja Quelltextteile mit try & except erst ein mal eingrenzen. Leider ist dem anscheint nicht so, except wird ignoriert. Testapp:
Delphi-Quellcode:
program Blah;
type DWORD = Cardinal; function msgb(hWnd: DWORD; lpText, lpCaption: PChar; uType: DWORD): Integer; stdcall; external 'user32.dll' name 'MessageBoxA'; var n, i: integer; BEGIN SetLastError(0); i := 1; dec(i); try n := 50 div i; except n := -1; end; if n <> 0 then msgb(0, 'Huch.', '!', 0); END. |
Re: In nonVCL Fehler / Exceptions abfangen ?
Ja und was soll da deiner Meinung nach passieren?
Soll da etwa eine MessageBox aufpoppen? Die poppt auf, wenn n größer als 0 Im Exception-Fall ist n aber kleiner gleich 0 -> -1 cu Oliver |
Re: In nonVCL Fehler / Exceptions abfangen ?
Ja, Tippfehler n<>0.
Das ist eigentlich dazu da, damit die Compilermagic nix weg optimiert. |
Re: In nonVCL Fehler / Exceptions abfangen ?
Zitat:
Besteht der Fehler immer noch, oder ist das durch die Korrektur des Tippfehlers behoben? cu Oliver |
Re: In nonVCL Fehler / Exceptions abfangen ?
Es geht darum das der Except-Block ignoriert wird.
Nehmen wir die SysUtils auf funktioniert der Except-Block wie erwartet. Also kann man bei nonVCL try & except in die Tonne verschieben ? |
Re: In nonVCL Fehler / Exceptions abfangen ?
Ja, kann man.
Sysutils installiert das Exception Handling. |
Re: In nonVCL Fehler / Exceptions abfangen ?
Dank für die Erkenntnis.
Fummele schon 'ne ganze Zeit mit dem Fehler herum, konnte ihn aber bei automatisch eingebundenen SysUtils nicht reproduzieren. Gruß Wolfgang |
Re: In nonVCL Fehler / Exceptions abfangen ?
Das kommt ja darauf an, wie man nonVCL definiert. Für mich ist das einfach der Verzicht auf TForm etc., das schließt SysUtils ja nicht aus.
|
Re: In nonVCL Fehler / Exceptions abfangen ?
Zitat:
Ich habe es halt gern pure API. :mrgreen: |
Re: In nonVCL Fehler / Exceptions abfangen ?
[OT] Ich hab hier noch irgendwo die CD "TP 1.5 for Windows", wär das nix? :mrgreen: [/OT]
|
Re: In nonVCL Fehler / Exceptions abfangen ?
Offtropic Oh, danke für das Angebot. Ich nutze da lieber TP 5 oder BP 7 oder Turbo Pascal für Windows. :mrgreen: |
Re: In nonVCL Fehler / Exceptions abfangen ?
Seit wann braucht man fürs Exception-Handliung die Sysutils? Die Sysutils organisiert die Exceptions nur auf Ebene der OOP. Baut also eine Klasse um die Exception und Rekonstruiert dieses Objekt im Except-Block (oder erstellt sogar eins, wenn es eine externe Excpetion war).
Try-except sollte immer funktionieren, allerdings nur mit Sysutils kann man die Exception-Klasse nutzen. |
Re: In nonVCL Fehler / Exceptions abfangen ?
Zitat:
Delphi-Quellcode:
Ich müsste also 'Except geht' sehen. Leider hängt sich das Programm auf bzw. terminiert nicht.
program ExceptionTest;
{$APPTYPE CONSOLE} Var a,b : Integer; begin a := 1; b := 0; Try a := a div b; Except writeln('Except geht'); End; WriteLn(a); // Damit die Division nicht noch wegoptimiert wird. end. |
Re: In nonVCL Fehler / Exceptions abfangen ?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Und ohne eine Behandlung von Exceptions führen dieses zum sofortigen Programmabbruch. Vielleicht hilft der Anhang etwas. Der Debugger bekommt von den Exceptions was mit, aber ansonsten hab ich wohl irgendwo 'nen Fehler, denn die Exceptions werden leider nicht angezeigt. siehe ![]() Außerdem drehen einige Debugger durch. Das liegt wohl daran, daß dieses Exception-Objekt anders ist, als sie es kennen. Es wird nach der Exception zwar ordnungsgemäß weitergearbeitet, aber z.B. D2009 hört da mit dem Debuggen auf und das Programm läuft einfach so weiter. In D7 geht dieses aber. PS: die Exceptions sind CL ... haben ja direkt nicht mit der VisualCodeLibrary zu tun :angel2: |
Re: In nonVCL Fehler / Exceptions abfangen ?
Ohne die Sysutils wird aber das except komplett übersprungen und es ploppt
das "Runtimeerror at 0815xx" auf. Kannst du ja mit obigen Beispiel ausprobieren. |
Re: In nonVCL Fehler / Exceptions abfangen ?
Zitat:
Mir wäre halt wichtig das man im except-Block den Fehler loggen kann oder einen validierten Wert zu weisen kann. Dein Demo kann ich leider noch nicht testen, SAccessViolationNoArg und einige Andere sind D6 wohl unbekannt. Mal sehen... |
Re: In nonVCL Fehler / Exceptions abfangen ?
bei dieser Konstannte kannst'e im Notfall erstmal einfach die ' drumrummachen
Delphi-Quellcode:
Nja, es ist halt so einiges mit der Zeit dazugekommen, umbenannt wurden oder es wurde umgelagert.
'SAccessViolationNoArg'
|
Re: In nonVCL Fehler / Exceptions abfangen ?
Jo, passt schon. :thumb:
|
Re: In nonVCL Fehler / Exceptions abfangen ?
Zitat:
Zitat:
|
Re: In nonVCL Fehler / Exceptions abfangen ?
Nja ... Try-Except hat er vielleicht, aber deswegen werden die Exceptions nicht "behandelt",
bzw. wenn nichts Anderes in der Unit System angegeben ist, dann leitet diese die Exceptions direkt an Windows weiter ![]() Zitat:
|
Re: In nonVCL Fehler / Exceptions abfangen ?
[INFO]
ich bin blöd :wall: die Exception wird doch im Programm angezeigt ... also wenn man sie nicht mit Try-Except abfangen würde :oops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 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