GetExceptionCode 宏

检索标识发生的异常类型的代码。 只能从异常处理程序的筛选器表达式或异常处理程序块中调用函数。

注意

Microsoft C/C++ 优化编译器将此函数解释为关键字 (keyword) ,它在适当的异常处理语法之外使用会生成编译器错误。

 

语法

DWORD GetExceptionCode(void);

parameters

此宏没有参数。

返回值

返回值标识异常的类型。 下表标识了由于常见编程错误而可能发生的异常代码。 这些值在 WinBase.h 和 WinNT.h 中定义。

返回代码 说明
EXCEPTION_ACCESS_VIOLATION
线程尝试从其无权访问的虚拟地址进行读取或写入。
此值定义为STATUS_ACCESS_VIOLATION。
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
线程尝试访问超出边界的数组元素,并且基础硬件支持边界检查。
此值定义为STATUS_ARRAY_BOUNDS_EXCEEDED。
EXCEPTION_BREAKPOINT
遇到断点。
此值定义为STATUS_BREAKPOINT。
EXCEPTION_DATATYPE_MISALIGNMENT
线程尝试读取或写入未提供对齐的硬件上未对齐的数据。 例如,16 位值必须在 2 字节边界上对齐,在 4 字节边界上对齐 32 位值,等等。
此值定义为 STATUS_DATATYPE_MISALIGNMENT。
EXCEPTION_FLT_DENORMAL_OPERAND
浮点运算中的一个操作数是反常运算。 非正态值太小,无法表示为标准浮点值。
此值定义为STATUS_FLOAT_DENORMAL_OPERAND。
EXCEPTION_FLT_DIVIDE_BY_ZERO
线程尝试将浮点值除以浮点除数 0 (零) 。
此值定义为STATUS_FLOAT_DIVIDE_BY_ZERO。
EXCEPTION_FLT_INEXACT_RESULT
浮点运算的结果不能完全表示为小数点。
此值定义为STATUS_FLOAT_INEXACT_RESULT。
EXCEPTION_FLT_INVALID_OPERATION
此列表中未包括的浮点异常。
此值定义为STATUS_FLOAT_INVALID_OPERATION。
EXCEPTION_FLT_OVERFLOW
浮点运算的指数大于相应类型允许的量级。
此值定义为STATUS_FLOAT_OVERFLOW。
EXCEPTION_FLT_STACK_CHECK
由于浮点操作,堆栈已溢出或不足。
此值定义为STATUS_FLOAT_STACK_CHECK。
EXCEPTION_FLT_UNDERFLOW
浮点运算的指数小于相应类型允许的幅度。
此值定义为STATUS_FLOAT_UNDERFLOW。
EXCEPTION_GUARD_PAGE
线程访问了使用 PAGE_GUARD 修饰符分配的内存。
此值定义为STATUS_GUARD_PAGE_VIOLATION。
EXCEPTION_ILLEGAL_INSTRUCTION
线程尝试执行无效指令。
此值定义为STATUS_ILLEGAL_INSTRUCTION。
EXCEPTION_IN_PAGE_ERROR
线程尝试访问不存在的页面,并且系统无法加载该页。 例如,如果在通过网络运行程序时网络连接断开,则可能会发生此异常。
此值定义为STATUS_IN_PAGE_ERROR。
EXCEPTION_INT_DIVIDE_BY_ZERO
线程尝试将整数值除以 0 (零) 的整数除数。
此值定义为STATUS_INTEGER_DIVIDE_BY_ZERO。
EXCEPTION_INT_OVERFLOW
整数运算的结果会创建一个太大而无法由目标寄存器保留的值。 在某些情况下,这将导致执行结果中最重要的位。 某些操作不设置携带标志。
此值定义为 STATUS_INTEGER_OVERFLOW。
EXCEPTION_INVALID_DISPOSITION
异常处理程序将无效处置返回到异常调度程序。 使用高级语言(如 C)的程序员不应遇到此异常。
此值定义为 STATUS_INVALID_DISPOSITION。
EXCEPTION_INVALID_HANDLE
线程对内核对象使用了句柄,该句柄 (可能是因为已关闭。)
此值定义为 STATUS_INVALID_HANDLE。
EXCEPTION_NONCONTINUABLE_EXCEPTION
线程在发生不连续异常后尝试继续执行。
此值定义为STATUS_NONCONTINUABLE_EXCEPTION。
EXCEPTION_PRIV_INSTRUCTION
线程尝试使用当前计算机模式中不允许的操作执行指令。
此值定义为STATUS_PRIVILEGED_INSTRUCTION。
EXCEPTION_SINGLE_STEP
跟踪陷阱或其他单一指令机制发出信号,指示执行了一条指令。
此值定义为STATUS_SINGLE_STEP。
EXCEPTION_STACK_OVERFLOW
线程会占用其堆栈。
此值定义为STATUS_STACK_OVERFLOW。
STATUS_UNWIND_CONSOLIDATE
已执行帧合并。

 

备注

GetExceptionCode 函数只能从异常处理程序的筛选器表达式或异常处理程序块中调用。 如果在执行 __try 块期间发生异常,则计算筛选器表达式,并确定是否执行 __except 块。

筛选器表达式可以调用筛选器函数。 筛选器函数不能调用 GetExceptionCode。 但是, GetExceptionCode 的返回值可以作为参数传递给筛选器函数。 GetExceptionInformation 函数的返回值也可以作为参数传递给筛选器函数。 GetExceptionInformation 返回指向包含异常代码信息的结构的指针。

当存在嵌套处理程序时,将计算每个筛选器表达式,直到将一个筛选器表达式计算为EXCEPTION_EXECUTE_HANDLER或EXCEPTION_CONTINUE_EXECUTION。 每个筛选器表达式都可以调用 GetExceptionCode 来获取异常代码。

返回的异常代码是硬件异常生成的代码,或在 RaiseException 函数中为软件生成的异常指定的代码。

处理断点异常时,请务必递增上下文记录中的指令指针,以继续此异常。

示例

有关示例,请参阅 使用异常处理程序

要求

要求
最低受支持的客户端
Windows XP [仅限桌面应用]
最低受支持的服务器
Windows Server 2003 [仅限桌面应用]

请参阅

GetExceptionInformation

RaiseException

结构化异常处理函数

结构化异常处理概述