异常处理程序语法
__try 和 __except 关键字用于构造基于帧的异常处理程序。 下面的示例显示了异常处理程序的结构。
__try
{
// guarded body of code
}
__except (filter-expression)
{
// exception-handler block
}
请注意, __try 块和异常处理程序块需要使用大括号 ({})。 不允许使用 goto 语句跳转到 __try 块或异常处理程序块的正文中。 此规则适用于异常处理程序和终止处理程序。
__try 块包含异常处理程序保护的代码的受保护正文。 一个函数可以包含任意数量的异常处理程序,这些异常处理语句可以嵌套在同一函数或不同函数中。 如果在 __try 块中发生异常,则系统将获取控制权并开始搜索异常处理程序。 有关此搜索的详细说明,请参阅异常处理。
异常处理程序仅接收单个线程中发生的异常。 这意味着,如果 __try 块包含对 CreateProcess 或 CreateThread 函数的调用,则新进程或线程中发生的异常不会调度到此处理程序。
系统会计算每个异常处理程序的筛选器表达式,该处理程序会保护发生异常的代码,直到异常被处理或没有其他处理程序。 筛选器表达式必须计算为以下三个值之一。
值 | 含义 |
---|---|
EXCEPTION_EXECUTE_HANDLER | 系统将控制权转给异常处理程序,并在找到处理程序的堆栈帧中继续执行。 |
EXCEPTION_CONTINUE_SEARCH | 系统继续搜索处理程序。 |
EXCEPTION_CONTINUE_EXECUTION | 系统停止处理程序搜索,并将控制权返回到异常发生位置。 如果异常不可连续,则会导致 EXCEPTION_NONCONTINUABLE_EXCEPTION 异常。 |
筛选器表达式是在异常处理程序所在的函数上下文中计算的,即使异常可能在其他函数中发生也不例外。 这意味着筛选器表达式可以访问函数的局部变量。 同样,异常处理程序块可以访问其所在函数的局部变量。
有关更多示例,请参阅使用异常处理程序。
有关筛选器表达式和筛选器函数的详细信息,请参阅基于帧的异常处理。