|
Frame-based Exception Handling
A frame-based exception handler is a mechanism by which a developer deals with the possibility that an
exception may occur in a certain sequence of code. A frame-based exception handler
consists of the following elements.
- A guarded body of code
- A filter expression
- An exception-handler block
Frame-based exception handlers are declared in language-specific syntax. For
example, in the Microsoft® C Optimizing Compiler, they are implemented by the try-except statement. For more information about the Microsoft C exception-handling
syntax, see Syntax.
The guarded body of code is a set of one or more statements for which the filter expression and the
exception-handler block provide exception-handling protection. The guarded body
can be a block of code, a set of nested blocks, or an entire procedure or
function. In Microsoft C, a guarded body is enclosed by braces ({}) following the try keyword.
The filter expression of a frame-based exception handler is an expression that is evaluated by the
system when an exception occurs within the guarded body. This evaluation
results in one of the following actions by the system.
- The system stops its search for an exception handler, restores the machine
state, and continues thread execution at the point at which the exception
occurred.
- The system continues its search for an exception handler.
- The system transfers control to the exception handler, and thread execution
continues sequentially in the stack frame in which the exception handler is
found. If the handler is not in the stack frame in which the exception occurred, the
system unwinds the stack, leaving the current stack frame and any other stack
frames until it is back to the exception handler's stack frame. Before an
exception handler is executed, termination handlers are executed for any guarded
bodies of code that terminated as a result of the transfer of control to the
exception handler. For more information about termination handlers, refer to Termination Handling.
The filter expression can be a simple expression, or it can invoke a filter function that attempts to handle the exception. You can call the GetExceptionCode and GetExceptionInformation functions from within a filter expression to get information about the
exception being filtered. GetExceptionCode returns a code that identifies the type of exception, and GetExceptionInformation returns a pointer to an EXCEPTION_POINTERS structure that contains pointers to CONTEXT and EXCEPTION_RECORD structures.
These functions cannot be called from within a filter function, but their
return values can be passed as parameters to a filter function. GetExceptionCode can be used within the exception-handler block, but GetExceptionInformation cannot because the information it points to is typically on the stack and is
destroyed when control is transferred to an exception handler. However, an
application can copy the information to safe storage to make it available to the
exception handler.
The advantage of a filter function is that it can handle an exception and
return a value that causes the system to continue execution from the point at which
the exception occurred. With an exception-handler block, in contrast,
execution continues sequentially from the exception handler rather than from the point
of the exception.
Handling an exception may be as simple as noting an error and setting a flag
that will be examined later, printing a warning or error message, or taking some
other limited action. If execution can be continued, it may also be necessary
to change the machine state by modifying the context record. For an example of
a filter function that handles a page fault exception, see Memory Management.
The UnhandledExceptionFilter function can be used as a filter function in a filter expression. It returns
EXCEPTION_EXECUTE_HANDLER unless the process is being debugged, in which case
it returns EXCEPTION_CONTINUE_SEARCH.
| Last news from Greatis Software |
 |
|
Nostalgia .Net |
|
.Net is powerful, but not all-powerful, so sometimes we need to use Win32 API for our .Net applications. It's simple enough with Platform Invoke if you have Win32 skill, but we do not always have time to dig the ancient documentation, declare the special types that are compatible with Win32, find the values of the Win32's constants and so on. Nostalgia .Net offers several simple-to-use classes, and components that will allow you to forget about the headache of Win32 and just use the power of Win32 in your application the same way as you use the native. Net classes. More » |
| Recommended software for developers |
 |
|
Ultimate Pack |
|
Component pack for Delphi and C++ Builder that contains runtime form designer, runtime object inspector, print suite and much more for the very special price. More » |
 |
|
Form Designer .Net |
|
Unique runtime form design solution that allows to edit any form in .Net WinForms application at runtime with full source codes for only 300 euro! More » |
 |
|
Print Suite .Net |
|
Print Suite .Net is a set of components for easy printing texts, images and grids from your WinForms applications. Full C# source codes are available More » |
 |
|
Gradient Controls .Net |
|
Gradient Controls .Net offers controls with gradient background feature. Labels, panels and so on... Full C# source codes are available More » |
 |
|
Greatis iGrid |
|
iGrid plots drawing grid right over your desktop, so you can use it everywhere, with any drawing application without any special plugins for different graphic editors. More » |
All the contacts and projectsDmitry Vasiliev (just.dmitry)
Related LinksSoftware for Visual Studio .NET developers Software for Delphi and C++ Builder developers Software for Visual Basic 6 developers Delphi Tips&Tricks MegaDetailed.NET More Online Helps Win32 Programmer's Reference Win32 Multimedia Programmer's Reference OLE Programmer's Reference Microsoft Windows Pen API Programmer's Reference Microsoft Windows Sockets 2 Reference Microsoft Windows Telephony API (TAPI) Programmer's Reference Unix Manual Pages
|