Windows SEH机制(二)
书接上文,我们继续讨论异常过滤器和异常处理程序。
上文我们讨论了EXCEPTION_EXECUTE_HANDLER。当try块中发生异常时,如果异常过滤程序求得的值为EXCEPTION_EXECUTE_HANDLER,那么系统就会开始执行except代码块中的代码。
EXCEPTION_CONTINUE_SEARCH
EXCEPTION_CONTINUE_SEARCH表示我们希望继续向上查找可以处理该异常的except块。
EXCEPTION_CONTINUE_EXECUTION
异常过滤程序计算得到这个值说明我们希望重新执行发生异常的代码,这通常表示我们已经在异常过滤程序中处理了异常(不推荐)。
一个异常发生后,进程或线程已经变得不稳定,所以尽可能让异常过滤程序简单。
软件异常
之前讨论的都是硬件异常,也就是由CPU捕获的并抛出的异常。我们自己也可以在程序中抛出异常。
要抛出一个软件异常,可以使用RaiseException函数。
推荐使用软件异常与SEH结合来处理错误,而不是返回一个失败值给上级函数。