Sintaxis de Exception-Handler
Las palabras clave __try y __except se usan para construir un controlador de excepciones basado en fotogramas. En el ejemplo siguiente se muestra la estructura de un controlador de excepciones.
__try
{
// guarded body of code
}
__except (filter-expression)
{
// exception-handler block
}
Tenga en cuenta que el bloque __try y el bloque del controlador de excepciones requieren llaves ({}). No se permite el uso de una instrucción goto para saltar al cuerpo de un bloque de __try o a un bloque de controlador de excepciones. Esta regla se aplica a los controladores de excepciones y a los controladores de terminación.
El bloque __try contiene el cuerpo protegido del código que protege el controlador de excepciones. Una función puede tener cualquier número de controladores de excepciones y estas instrucciones de control de excepciones se pueden anidar dentro de la misma función o en funciones diferentes. Si se produce una excepción dentro del bloque __try , el sistema toma el control y comienza la búsqueda de un controlador de excepciones. Para obtener una descripción detallada de esta búsqueda, consulte Control de excepciones.
El controlador de excepciones recibe solo las excepciones que se producen dentro de un único subproceso. Esto significa que si un bloque de __try contiene una llamada a la función CreateProcess o CreateThread , las excepciones que se producen dentro del nuevo proceso o subproceso no se envían a este controlador.
El sistema evalúa la expresión de filtro de cada controlador de excepciones que protege el código en el que se produjo la excepción hasta que se controla la excepción o no hay más controladores. Una expresión de filtro debe evaluarse como uno de los tres valores siguientes.
Valor | Significado |
---|---|
EXCEPTION_EXECUTE_HANDLER | El sistema transfiere el control al controlador de excepciones y la ejecución continúa en el marco de pila en el que se encuentra el controlador. |
EXCEPTION_CONTINUE_SEARCH | El sistema sigue buscando un controlador. |
EXCEPTION_CONTINUE_EXECUTION | El sistema detiene la búsqueda de un controlador y devuelve el control al punto en el que se produjo la excepción. Si la excepción no se puede usar, se produce una excepción de EXCEPTION_NONCONTINUABLE_EXCEPTION . |
La expresión de filtro se evalúa en el contexto de la función en la que se encuentra el controlador de excepciones, aunque la excepción se haya producido en una función diferente. Esto significa que la expresión de filtro puede tener acceso a las variables locales de la función. Del mismo modo, el bloque del controlador de excepciones puede tener acceso a las variables locales de la función en la que se encuentra.
Para obtener más ejemplos, consulte Uso de un controlador de excepciones.
Para obtener más información sobre las expresiones de filtro y las funciones de filtro, vea Control de excepciones basado en fotogramas.