作者:shenzi
链接:http://blog.csdn.net/shenzi
Windows核心编程:结构化异常处理
结构化异常处理(structured exception handling,SEH)带来的好处是我们在写代码时,可以先集中精力完成软件的正常工作流程。如果在运行的时候出现了什么问题,系统会捕获这个问题,并且通知我们。
使用SEH,并不意味着可以完全忽略代码中可能出现的错误,但是我们可以将软件主要功能编写和软件异常情况处理这两个任务分离开。这样就可以先集中注意力完成手头上的工作,稍后再去处理软件可能会遇到的各种错误情况。
SEH实际上包含两方面的功能:终止处理(termination handling)和异常处理(exception handling)。
1.终止处理
使用SEH,并不意味着可以完全忽略代码中可能出现的错误,但是我们可以将软件主要功能编写和软件异常情况处理这两个任务分离开。这样就可以先集中注意力完成手头上的工作,稍后再去处理软件可能会遇到的各种错误情况。
SEH实际上包含两方面的功能:终止处理(termination handling)和异常处理(exception handling)。
1.终止处理
终止处理程序确保不管一个代码块(被保护代码(the guarded body))是如何退出的,另一个代码块(终止处理程序)总能被调用和执行。终止处理的语法(当使用Microsoft Visual C++编译器时)如下所示:
__try {
// Guarded body
被保护代码
...
}
__finally {
// Termination handler
终止处理程序
...
}
在这段代码中,操作系统和编译器的协同工作保证了不管被保护代码部分是如何退出的——无论我们在被保护代码中使用了return,还是goto,又或者longjump语句(除非调用ExitProcess , ExitThread , TerminateProcess , 或TerminateThread 来终止进程或线程)——终止处理程序都会被调用,即 __finally 代码块都能执行。
一条好的经验法则是,不要在终止处理程序里包含让try块提前退出的语句,这意味着从try块和finally块中移除return,continue,break,goto等语句,即把这些语句放在终止处理程序之外。
当系统因为try代码块中的代码提前退出而执行f