第二十三章 结束处理程序
1.结构化异常处理
SEH是由编译器实现的,不同编译器在实现SEH时会有些区别。它是Winodws特有的技术。
SEH和C++异常是两种不同的异常机制。在VC中C++异常是基于SEH实现的。
2.结构化异常处理用法
(1)__try
__try后必须接__finally和__except中的一个,且只能有一个。
若__try中有return,break,continue等语句,在执行这些语句前,系统会先调用__finally中的代码然后再跳回到return,break,continue继续执行。
若__try中有ExitThread,ExitProcess等语句,线程或程会立刻退出而不会执行__finally中的代码。
(2)__leave
若__try中有__leave,代码会从该处跳到__try的未端,直接执行__finally中的代码,然后继续向下执行,而不会跳回到原处。
建议将程序中的return,break,continue等语句换成__leave
(3)__finally
它不会处理程序中的异常,但会处理程序中的goto,break,continue,return等语句。
AbnormalTermination()函数只能在__finally块中用,它用于判断程序是因顺序执行到__finally处,还是因return,goto等语句跳到__finally处。
(4)__except
只有当__try块中的代码产生异常时,__except中的代码才会执行。
若程序中有异常且无__except,那么程序会异常退出。