GetExceptionCode函数检索一个代码,该代码标识发生的异常类型。该函数只能从尝试 - 除异常处理程序的过滤器表达式或异常处理程序块中调用。
DWORD GetExceptionCode(VOID)
参数
此函数无参数。
返回值
返回值标识异常的类型。以下是由于常见的编程错误而可能发生的异常代码:
值 | 含义 | ||||
EXCEPTION_ACCESS_VIOLATION | |||||
线程尝试从不具有适当访问权限的虚拟地址读取或写入该虚拟地址。 | |||||
EXCEPTION_BREAKPOINT | |||||
遇到断点。 | |||||
EXCEPTION_DATATYPE_MISALIGNMENT | |||||
线程尝试读取或写入不提供对齐的硬件上未对齐的数据。例如,16位值必须在2字节边界对齐,32位值在4字节边界上等等。 | |||||
EXCEPTION_SINGLE_STEP | |||||
跟踪陷阱或其他单指令机制发出信号,指示一条指令已被执行。 | |||||
EXCEPTION_ARRAY_BOUNDS_EXCEEDED | |||||
线程尝试访问超出边界的数组元素,底层硬件支持边界检查。 | |||||
EXCEPTION_FLT_DENORMAL_OPERAND | |||||
浮点运算中的一个操作数是不正常的。异常值是一个太小的值,不能表示为标准浮点值。 | |||||
EXCEPTION_FLT_DIVIDE_BY_ZERO | |||||
线程尝试将浮点值除以零的浮点除数。 | |||||
EXCEPTION_FLT_INEXACT_RESULT | |||||
浮点运算的结果不能精确地表示为小数。 | |||||
EXCEPTION_FLT_INVALID_OPERATION | |||||
此异常表示此列表中未包含的任何浮点异常。 | |||||
EXCEPTION_FLT_OVERFLOW | |||||
浮点运算的指数大于相应类型所允许的大小。 | |||||
EXCEPTION_FLT_STACK_CHECK | |||||
由于浮点运算,堆栈溢出或下溢。 | |||||
EXCEPTION_FLT_UNDERFLOW | |||||
浮点运算的指数小于相应类型允许的数值。 | |||||
EXCEPTION_INT_DIVIDE_BY_ZERO | |||||
线程尝试将整数值除以零的整数除数。 | |||||
EXCEPTION_INT_OVERFLOW | |||||
整数运算的结果导致结果的最高有效位的进位。 | |||||
EXCEPTION_PRIV_INSTRUCTION | |||||
线程尝试执行在当前机器模式下不允许其操作的指令。 | |||||
EXCEPTION_NONCONTINUABLE_EXCEPTION | |||||
线程尝试在发生不可持续异常后继续执行。 |
备注
只能从尝试 - 除语句的过滤器表达式或异常处理程序块中调用GetExceptionCode函数。如果尝试块执行期间发生异常,则会评估过滤器表达式,并确定是否执行除块。以下示例显示尝试 - 除语句的结构。
尝试{
/ * try block * /
}
except(filter-expression){
/ *异常处理程序块* /
}
过滤器表达式可以调用过滤器函数。过滤功能无法调用GetExceptionCode.但是,返回值GetExceptionCode可以作为参数传递给过滤器函数。GetExceptionInformation函数的返回值也可以作为参数传递给过滤器函数。GetExceptionInformation返回一个指向包含异常代码信息的结构的指针。
在嵌套尝试 - 除语句的情况下,将对每个语句的过滤器表达式进行求值,直到被评估为EXCEPTION_EXECUTE_HANDLER或EXCEPTION_CONTINUE_EXECUTION为止。每个过滤器表达式可以调用GetExceptionCode来获取异常代码。
返回的异常代码是由硬件异常生成的代码,或由软件生成的异常的RaiseException函数中指定的代码。
也可以看看