共用方式為


Exception-Handler 語法

__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 例外狀況。

 

篩選表達式是在例外狀況處理程式所在的函式內容中進行評估,即使例外狀況可能發生在不同的函式中也一樣。 這表示篩選表達式可以存取函式的局部變數。 同樣地,例外狀況處理程式區塊可以存取其所在函式的局部變數。

如需更多範例,請參閱 使用例外狀況處理程式

如需篩選表達式和篩選函式的詳細資訊,請參閱 以框架為基礎的例外狀況處理