syntaxe Exception-Handler
Les mots clés __try et __except sont utilisés pour construire un gestionnaire d’exceptions basé sur des images. L’exemple suivant montre la structure d’un gestionnaire d’exceptions.
__try
{
// guarded body of code
}
__except (filter-expression)
{
// exception-handler block
}
Notez que le bloc __try et le bloc de gestionnaire d’exceptions nécessitent des accolades ({}). L’utilisation d’une instruction goto pour sauter dans le corps d’un bloc __try ou dans un bloc de gestionnaire d’exceptions n’est pas autorisée. Cette règle s’applique aux gestionnaires d’exceptions et aux gestionnaires de terminaison.
Le bloc __try contient le corps du code protégé que le gestionnaire d’exceptions protège. Une fonction peut avoir n’importe quel nombre de gestionnaires d’exceptions, et ces instructions de gestion des exceptions peuvent être imbriquées dans la même fonction ou dans différentes fonctions. Si une exception se produit dans le bloc __try , le système prend le contrôle et commence la recherche d’un gestionnaire d’exceptions. Pour obtenir une description détaillée de cette recherche, consultez Gestion des exceptions.
Le gestionnaire d’exceptions reçoit uniquement les exceptions qui se produisent dans un seul thread. Cela signifie que si un bloc __try contient un appel à la fonction CreateProcess ou CreateThread , les exceptions qui se produisent dans le nouveau processus ou thread ne sont pas distribuées à ce gestionnaire.
Le système évalue l’expression de filtre de chaque gestionnaire d’exceptions qui protège le code dans lequel l’exception s’est produite jusqu’à ce que l’exception soit gérée ou qu’il n’y ait plus de gestionnaires. Une expression de filtre doit être évaluée comme l’une des trois valeurs suivantes.
Valeur | Signification |
---|---|
EXCEPTION_EXECUTE_HANDLER | Le système transfère le contrôle vers le gestionnaire d’exceptions, et l’exécution se poursuit dans le cadre de pile dans lequel le gestionnaire se trouve. |
EXCEPTION_CONTINUE_SEARCH | Le système continue à rechercher un gestionnaire. |
EXCEPTION_CONTINUE_EXECUTION | Le système arrête sa recherche d’un gestionnaire et retourne le contrôle au point où l’exception s’est produite. Si l’exception n’est pas continu, il en résulte une exception EXCEPTION_NONCONTINUABLE_EXCEPTION . |
L’expression de filtre est évaluée dans le contexte de la fonction dans laquelle se trouve le gestionnaire d’exceptions, même si l’exception peut s’être produite dans une autre fonction. Cela signifie que l’expression de filtre peut accéder aux variables locales de la fonction. De même, le bloc de gestionnaire d’exceptions peut accéder aux variables locales de la fonction dans laquelle il se trouve.
Pour plus d’exemples, consultez Utilisation d’un gestionnaire d’exceptions.
Pour plus d’informations sur les expressions de filtre et les fonctions de filtre, consultez Gestion des exceptions basée sur des images.