Gestion des exceptions structurées (C++)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Exceptions structurées sous Win32 (C++)

Les exceptions structurées peuvent être gérées en utilisant une extension de la gestion des exceptions C++ :

 try {
     foo();
 }
 __except (__expr__) {
     // handler here
 }

__expr__ est une expression qui est évaluée à l'une des trois valeurs suivantes :

Valeur Description
EXCEPTION_CONTINUE_SEARCH (0) Pas d'entrée dans le gestionnaire et le système d'exploitation continue de rechercher un gestionnaire d'exceptions.
EXCEPTION_CONTINUE_EXECUTION (-1) Continue l'exécution au point de l'exception.
EXCEPTION_EXECUTE_HANDLER (1) Entre dans le gestionnaire d'exceptions. Si le code a été compilé alors que le nettoyage des destructeurs était activé (option -xd, activée par défaut), tous les destructeurs des objets locaux créés entre le point de l'exception et le gestionnaire d'exceptions sont appelés lorsque la pile est déroulée. Le déroulement de la pile prend fin avant d'entrer dans le gestionnaire.
 #include <Windows.h>
 #include <excpt.h>
 
 int filter_func(EXCEPTION_POINTERS *);
 
 // ...
 
 EXCEPTION_POINTERS * xp = 0;
 try {
     foo();
 }
 __except (filter_func(xp = GetExceptionInformation())) {
     // ...
 }

Ou, si vous préférez utiliser l'opérateur virgule pour les affectations imbriquées dans des appels de fonction, voir l'exemple suivant :

 __except ((xp = GetExceptionInformation()), filter_func(xp))

Voir aussi