Partager via


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 accéder au 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 d’arrêt.

Le bloc __try contient le corps de 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 à l'CreateProcess ou fonction CreateThread, les exceptions qui se produisent dans le nouveau processus ou le 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 au gestionnaire d’exceptions et l’exécution se poursuit dans la trame de pile dans laquelle le gestionnaire est trouvé.
EXCEPTION_CONTINUE_SEARCH Le système continue de rechercher un gestionnaire.
EXCEPTION_CONTINUE_EXECUTION Le système arrête sa recherche d’un gestionnaire et retourne le contrôle au point auquel l’exception s’est produite. Si l’exception n’est pas continue, cela entraîne 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 elle 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.