PureBasic Forum
https://www.purebasic.fr/english/

Example of an Error Handler by FAKEFACTORY
https://www.purebasic.fr/english/viewtopic.php?f=12&t=3665
Page 1 of 1

Author:  BackupUser [ Thu Jan 17, 2002 5:07 pm ]
Post subject:  Example of an Error Handler by FAKEFACTORY

Code updated For 5.20+

Restored from previous forum. Originally posted by Franco.

Code:
; Found this great peace of code on the german PureBasic forum.
; Coded by FakeFactory, translated from german to english by Franco.
; Well documented example of the implementation of an Error-Trap-Routine
;
; You can add some code to receive information about what caused the error. (if you need...)
; For this look at MSDN or in a good C++ for Windows book.
 
Structure _EXCEPTION_POINTERS
  *ExceptionRecord.EXCEPTION_RECORD;
  *ContextRecord.CONTEXT;
EndStructure
 
Procedure _MyExceptionFilter(*lpEP._EXCEPTION_POINTERS)
  ; This is your own Error Message Handler.
  ; If your program is causing an illegal operation you get a crash and a Windows message like:
  ; "This program has performed an illegal operation and will be shut down"
  ; But with this Procedure not anymore!
  ; Now you get your own MessageBox and the Program will be ended smoothly.
  ; The user will be delighted and the bug in YOUR code seems to be not so bad at all.
 
  Shared TerminateInProcess.b

  If TerminateInProcess.b = #TRUE

    ; Well if you reach this point there was an error in our own Error Message Handler.
    ; We are not able to end our program smoothly.
    ; In this case we can do nothing and the Operating System has to do the work...
    ; But first we have to close our own Error Message Handler.
 
    Result.l = SetUnhandledExceptionFilter_(0)

    ; And now we get a nice crash controlled by the Operating System

    RaiseException_ (0,0,0,0)

    End
  Else
    TerminateInProcess.b = #TRUE
    ; OK we have now full control over the nasty bug and
    ; send a nice death announcement of the program...

    hWnd.l = WindowID(0)
    Result.l = MessageBox_ (hWnd.l, "We truly apologize for this inconvenience.", "Ups... there was a problem.", #MB_OK | #MB_ICONSTOP)
    End
  EndIf
EndProcedure
 
; this point is the normal start of your code and we have to activate the Error Handler
Result.l = SetUnhandledExceptionFilter_(@_MyExceptionFilter())
 
; start of your code
; yada, yada, yada...
 
; this point is the normal end of your code and we have to deactivate the Error Handler
Result.l = SetUnhandledExceptionFilter_(0)


Have a nice day...
Franco

BTW I didn't change the code above. But it's working without declaring the structure and without *lpEP._EXCEPTION_POINTERS when you call the procedure, it's not used inside the procedure anyway...


Edited by - franco on 17 January 2002 17:54:15

Author:  BackupUser [ Thu Jan 17, 2002 6:27 pm ]
Post subject: 

Restored from previous forum. Originally posted by FAKEFACTORY.

You need the structure, if you want to parse the error and give some details on the error.



Registered PureBasic Coder

Page 1 of 1 All times are UTC + 1 hour
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/