DosUnsetExceptionHandler: Difference between revisions
Appearance
mNo edit summary |
|||
| Line 1: | Line 1: | ||
Removes an exception handler from a thread's chain of exception handlers. | Removes an exception handler from a thread's chain of exception handlers. | ||
| Line 7: | Line 6: | ||
#include <os2.h> | #include <os2.h> | ||
PEXCEPTIONREGISTRATIONRECORD pERegRec; /* | PEXCEPTIONREGISTRATIONRECORD pERegRec; /* A pointer to the exception registration record | ||
APIRET ulrc; /* | that describes the exception handler to be | ||
unregistered. */ | |||
APIRET ulrc; /* Return Code. */ | |||
ulrc = DosUnsetExceptionHandler(pERegRec); | ulrc = DosUnsetExceptionHandler(pERegRec); | ||
</PRE> | |||
==Parameters== | ==Parameters== | ||
; | ;pERegRec (PEXCEPTIONREGISTRATIONRECORD) - input : A pointer to the exception registration record that describes the exception handler to be unregistered. | ||
==Return Code== | ==Return Code== | ||
ulrc (APIRET) - returns | ulrc (APIRET) - returns | ||
DosUnsetExceptionHandler returns one of the following values: | DosUnsetExceptionHandler returns one of the following values: | ||
* 0 NO_ERROR | |||
* 87 ERROR_INVALID_PARAMETER | |||
==Remarks== | ==Remarks== | ||
Note: Do not make Presentation Manager calls from exception handlers. | Note: Do not make Presentation Manager calls from exception handlers. | ||
| Line 96: | Line 96: | ||
return XCPT_CONTINUE_SEARCH; /* Exception not resolved... */ | return XCPT_CONTINUE_SEARCH; /* Exception not resolved... */ | ||
} | } | ||
</PRE> | |||
==Related Functions== | ==Related Functions== | ||
* [[ | * [[DosAcknowledgeSignalException]] | ||
* [[ | * [[DosEnterMustComplete]] | ||
* [[ | * [[DosExitMustComplete]] | ||
* [[ | * [[DosRaiseException]] | ||
* [[ | * [[DosSendSignalException]] | ||
* [[ | * [[DosSetExceptionHandler]] | ||
* [[ | * [[DosSetSignalExceptionFocus]] | ||
* [[ | * [[DosUnwindException]] | ||
[[Category: | [[Category:Dos]] | ||
Revision as of 00:53, 24 December 2016
Removes an exception handler from a thread's chain of exception handlers.
Syntax
#define INCL_DOSEXCEPTIONS
#include <os2.h>
PEXCEPTIONREGISTRATIONRECORD pERegRec; /* A pointer to the exception registration record
that describes the exception handler to be
unregistered. */
APIRET ulrc; /* Return Code. */
ulrc = DosUnsetExceptionHandler(pERegRec);
Parameters
- pERegRec (PEXCEPTIONREGISTRATIONRECORD) - input
- A pointer to the exception registration record that describes the exception handler to be unregistered.
Return Code
ulrc (APIRET) - returns
DosUnsetExceptionHandler returns one of the following values:
- 0 NO_ERROR
- 87 ERROR_INVALID_PARAMETER
Remarks
Note: Do not make Presentation Manager calls from exception handlers.
DosUnsetExceptionHandler deregisters (removes) an exception handler from a thread's chain of registered exception handlers.
For a detailed list of the system exceptions, see System Exceptions.
Example Code
This example sets and unsets an exception handler named "MyTermhandler" from the thread's chain of exception handlers.
#define INCL_DOSPROCESS /* DOS process values (for DosSleep) */
#define INCL_DOSEXCEPTIONS /* DOS exception values */
#define INCL_ERRORS /* DOS error values */
#include <os2.h>
#include <stdio.h>
ULONG _System MyTermHandler( PEXCEPTIONREPORTRECORD p1,
PEXCEPTIONREGISTRATIONRECORD p2,
PCONTEXTRECORD p3,
PVOID pv );
int main (VOID)
{
EXCEPTIONREGISTRATIONRECORD RegRec = {0}; /* Exception Registration Record */
APIRET rc = NO_ERROR; /* Return code */
/* Add MyTermHandler to this thread's chain of exception handlers */
RegRec.ExceptionHandler = (ERR)MyTermHandler;
rc = DosSetExceptionHandler( &RegRec );
if (rc != NO_ERROR) {
printf("DosSetExceptionHandler error: return code = %u\n",rc);
return 1;
}
printf("Terminate this program using Ctrl-C or Ctrl-Break.\n");
rc = DosSleep(60000L); /* Give user plenty of time to comply... */
rc = DosUnsetExceptionHandler( &RegRec );
if (rc != NO_ERROR) {
printf("DosUnsetExceptionHandler error: return code = %u\n",rc);
return 1;
}
return NO_ERROR;
}
/***************************************************************************/
ULONG _System MyTermHandler( PEXCEPTIONREPORTRECORD p1,
PEXCEPTIONREGISTRATIONRECORD p2,
PCONTEXTRECORD p3,
PVOID pv )
{
printf("*** MyTermHandler entered: ExceptionNum = %x\n",p1->ExceptionNum);
switch( p1->ExceptionNum) {
case XCPT_SIGNAL: {
printf(" XCPT_SIGNAL");
switch( p1->ExceptionInfo[0] ) {
case XCPT_SIGNAL_INTR: { printf("_INTR"); break; }
case XCPT_SIGNAL_KILLPROC: { printf("_KILLPROC"); break; }
case XCPT_SIGNAL_BREAK: { printf("_BREAK"); break; }
default:;
}
printf("\n"); break;
}
case XCPT_PROCESS_TERMINATE: { printf(" Process Terminate \n"); break;}
case XCPT_ASYNC_PROCESS_TERMINATE: { printf(" Async Process Term\n"); break;}
case XCPT_UNWIND: { printf(" XCPT_UNWIND\n"); break;}
default:;
}
return XCPT_CONTINUE_SEARCH; /* Exception not resolved... */
}