Prototype of an OS/2 Exception Handler

All OS/2 exception handlers conform to the prototype for MyExceptHandler shown below. You can use such a handler alone, or with the IBM C and C++ Compilers default handler, _Exception.

#define INCL_BASE
#include <os2.h>

APIRET APIENTRY MyExceptHandler(EXCEPTIONREPORTRECORD *,
                                EXCEPTIONREGISTRATIONRECORD *,
                                CONTEXTRECORD *,
                                PVOID dummy);

The structures passed as parameters are updated by OS/2 and provide your function with information about the exception. They are defined in the OS/2 header file <bsexcpt.h>.

The types and linkage convention used in the prototype are as follows:

Keyword Description
APIRET Specifies the return type of the function. If you return from your exception handler, you must return one of the following two values:
  • XCPT_CONTINUE_SEARCH indicates that the exception has not been handled and tells the operating system to pass the exception to the next exception handler.
  • XCPT_CONTINUE_EXECUTION indicates that the exception condition has been corrected and tells the operating system to resume running the application using the information in the CONTEXTRECORD.
APIENTRY Defines the function linkage. The OS/2 header files found in the IBMCXXO\INCLUDE\OS2 directory header files define APIENTRY as
_System linkage. Use the APIENTRY keyword rather than specifying the linkage type yourself. Note that your exception
handler must be an external function; it cannot be static.
EXCEPTIONREPORTRECORD * Points to a structure that contains high-level information about the exception.
EXCEPTIONREGISTRATIONRECORD * Points to the record that registered the exception handler. The address of the record is always on the stack.
CONTEXTRECORD * Points to a structure that contains information about the state of the thread at the time of the exception, including the register
contents and the state of the floating-point unit and flags. When an exception handler returns XCPT_CONTINUE_EXECUTION,
the machine state is reloaded from this structure. You should only modify the contents of this structure if you are sure your
exception handler will return XCPT_CONTINUE_EXECUTION.
PVOID Is a pointer to void that you must pass back unchanged to the operating system.
 


Signal and Exception Handling


Write or Register an Exception Handler
Register an OS/2 Exception Handler Using OS/2 APIs


OS/2 Exceptions and Default Handling
Exception Information Provided by OS/2
OS/2 APIs That Interfere with Exception Handling
Example of an OS/2 Exception Handler