Gestion des exceptions structurées (C++)
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))