异常处理程序语法

__try__except 关键字用于构造基于帧的异常处理程序。 下面的示例显示了异常处理程序的结构。

__try 
{
    // guarded body of code 
 
} 
__except (filter-expression) 
{ 
    // exception-handler block 
 
}

请注意, __try 块和异常处理程序块需要使用大括号 ({})。 不允许使用 goto 语句跳转到 __try 块或异常处理程序块的正文中。 此规则适用于异常处理程序和终止处理程序。

__try 块包含异常处理程序保护的代码的受保护正文。 一个函数可以包含任意数量的异常处理程序,这些异常处理语句可以嵌套在同一函数或不同函数中。 如果在 __try 块中发生异常,则系统将获取控制权并开始搜索异常处理程序。 有关此搜索的详细说明,请参阅异常处理

异常处理程序仅接收单个线程中发生的异常。 这意味着,如果 __try 块包含对 CreateProcessCreateThread 函数的调用,则新进程或线程中发生的异常不会调度到此处理程序。

系统会计算每个异常处理程序的筛选器表达式,该处理程序会保护发生异常的代码,直到异常被处理或没有其他处理程序。 筛选器表达式必须计算为以下三个值之一。

含义
EXCEPTION_EXECUTE_HANDLER 系统将控制权转给异常处理程序,并在找到处理程序的堆栈帧中继续执行。
EXCEPTION_CONTINUE_SEARCH 系统继续搜索处理程序。
EXCEPTION_CONTINUE_EXECUTION 系统停止处理程序搜索,并将控制权返回到异常发生位置。 如果异常不可连续,则会导致 EXCEPTION_NONCONTINUABLE_EXCEPTION 异常。

 

筛选器表达式是在异常处理程序所在的函数上下文中计算的,即使异常可能在其他函数中发生也不例外。 这意味着筛选器表达式可以访问函数的局部变量。 同样,异常处理程序块可以访问其所在函数的局部变量。

有关更多示例,请参阅使用异常处理程序

有关筛选器表达式和筛选器函数的详细信息,请参阅基于帧的异常处理