结构化异常处理(SEH)

来源:互联网 发布:鼠标编程是什么意思 编辑:程序博客网 时间:2024/05/25 20:00

结构化异常处理(SEH)
结构化异常处理(SEH)
__try :
保护代码块,该代码块产生异常会抛出该异常
__finally :
终结处理器,只要离开保护代码块,就会执行finaly内的语句
__except :
异常过滤, 1 :执行异常处理块,不回到产生异常处
0 :寻找下一个异常处理
-1:回到产生异常处再次执行
unsigned long GetExceptionCode(void)
// 返回异常类型
_EXCEPTION_POINTERS * GetExceptionInfomation()
// 返回结构体
// typedef struct_EXCEPTION_POINTERS{
PEXCEPTION_RECORD ExceptionRecord; //异常码
PCONTEXT ContextRecord; //当前线程环境,寄存器状态等
}EXCEPTION_POINTERS,*PEXCEPTION_POINTERS
__leave :
离开保护区,不会造成局部展开
局部展开 :
__try __finally
当保护区的代码需要离开保护区时,使用return,goto,break等
语句离开时,会在离开前由系统调用执行_finaly区的语句,然后执行离开
语句.
当使用__leave离开保护区时,会跳转到保护区的末尾,开始执行__finaly
的语句,不会造成局部展开
全局展开 :
__try__finally
当__try中的代码发生异常时,会向上寻找__try__except,执行__except()
的异常过滤器,当异常过滤器返回1时,才会执行__try__finally的指令,
然后执行__except{}的指令.
先执行except() - > 返回1 - > 依次执行前面的finally{},最后执行except{}
为了堆栈平衡而实现的措施,是不可避免的

原创粉丝点击