Поделиться через


Синтаксис обработчика исключений

__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 исключению.

 

Выражение фильтра вычисляется в контексте функции, в которой находится обработчик исключений, несмотря на то, что исключение, возможно, произошло в другой функции. Это означает, что выражение фильтра может получить доступ к локальным переменным функции. Аналогичным образом блок обработчика исключений может получить доступ к локальным переменным функции, в которой она находится.

Дополнительные примеры см. в разделе "Использование обработчика исключений".

Дополнительные сведения о выражениях фильтров и функциях фильтрации см. в разделе "Обработка исключений на основе кадра".