Exception-Handler 語法
__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 例外狀況。 |
篩選表達式是在例外狀況處理程式所在的函式內容中進行評估,即使例外狀況可能發生在不同的函式中也一樣。 這表示篩選表達式可以存取函式的局部變數。 同樣地,例外狀況處理程式區塊可以存取其所在函式的局部變數。
如需更多範例,請參閱 使用例外狀況處理程式。
如需篩選表達式和篩選函式的詳細資訊,請參閱 以框架為基礎的例外狀況處理。