Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Exception Handling

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 26.07.2008, 11:46    Titel: Exception Handling Antworten mit Zitat

Hallo! Ich hasse es, wenn irgendwo eine Access Violation auftritt und dann das Programm abschmiert. Ich will aber auch nicht das QBlike Error Handling verwenden, sondern Windows eine eigene Fehlerbehandlungsroutine schmackhaft machen. Nur wie? Die win32.hlp bezieht sich nur auf Win32-C-Compiler mit "try .. except .. finally". Gibt es nicht eine WinAPI-Funktion, die einen Exception Handler festlegt oder so?

mfG Cherry
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 27.07.2008, 08:27    Titel: Antworten mit Zitat

Danke, hab es schon selbst herausgefunden:

Code:

#include "windows.bi"

Dim Shared testptr As UInteger Ptr
Dim Shared test As UInteger

Function ExceptionHandler Cdecl (_exception As EXCEPTION_RECORD Ptr, _errstruct As UInteger Ptr, _context As CONTEXT Ptr) As Integer
   Dim As UInteger _param = _errstruct[2]
   Dim As UInteger _code, _flag, _adress, _write, _dest
   ' Laden der Informationen
   Asm
      mov edx, [_exception]
      push [edx]
      push [edx+4]
      push [edx+12]
      cmp dword ptr [edx+16], 2
      jnz _el1
      push [edx+20]
      push [edx+24]
      jmp _el2
      _el1:
      push 0
      push 0
      _el2:
      pop [_dest]
      pop [_write]
      pop [_adress]
      pop [_flag]
      pop [_code]
   End Asm
   Dim ret As UInteger

   ' Behandlung des Fehlers, je nach Kontext (_param)
   Select Case _param
      Case 0
         MessageBox(NULL, "Fehler " & Hex(_code) & " in Code Block 1 (Adresse " & Hex(_adress) & "!", "Fehler", 0)
         ExitProcess(1)
      Case 1
         MessageBox(NULL, "Fehler " & Hex(_code) & " in Code Block 2 (Adresse " & Hex(_adress) & "!", "Fehler", 0)
         ExitProcess(2)
   End Select
   Return ret
End Function


#Macro GuardedCode_Start(_param)
   Asm
      push _param
      push Offset ExceptionHandler
      push fs:[0]
      mov fs:[0], esp
   End Asm
#EndMacro

#Macro GuardedCode_End()
   Asm
      pop fs:[0]
      add esp, 8
   End Asm
#EndMacro

' Test code
' Code Block 1
GuardedCode_Start(0)
' Zugriff auf Nullpointer
*testptr = 5
GuardedCode_End()
' Code Block 2 (nie ausgeführt)
GuardedCode_Start(1)
Dim x As Byte Ptr
' Zugriff auf Nullpointer
*x = 0
GuardedCode_End()
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 16.08.2009, 18:20    Titel: Antworten mit Zitat

Sehr interessant, sollte vll. mal nach FBP bewegt werden.
Habs gerade in einem meiner Programme eingesetzt... naja hat mir nicht geholfen zu verstehen, warum SHGetSpecialFolderLocation ne Access Violation wirft...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 16.08.2009, 18:51    Titel: Antworten mit Zitat

Da gibts schon eine erweiterte Variante: http://forum.qbasic.at/viewtopic.php?t=6505
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz