GetExceptionCode, macro
Récupère un code qui identifie le type d’exception qui se produit. La fonction peut être appelée uniquement à partir du bloc d’expression de filtre ou de gestionnaire d’exceptions d’un gestionnaire d’exceptions.
Notes
Le compilateur d’optimisation Microsoft C/C++ interprète cette fonction comme une mot clé, et son utilisation en dehors de la syntaxe de gestion des exceptions appropriée génère une erreur du compilateur.
Syntaxe
DWORD GetExceptionCode(void);
Paramètres
Cette macro n’a aucun paramètre.
Valeur retournée
La valeur de retour identifie le type d’exception. Le tableau suivant identifie les codes d’exception qui peuvent se produire en raison d’erreurs de programmation courantes. Ces valeurs sont définies dans WinBase.h et WinNT.h.
Code de retour | Description |
---|---|
|
Le thread tente de lire ou d’écrire dans une adresse virtuelle à laquelle il n’a pas accès. Cette valeur est définie comme STATUS_ACCESS_VIOLATION. |
|
Le thread tente d’accéder à un élément de tableau hors limites, et le matériel sous-jacent prend en charge la vérification des limites. Cette valeur est définie comme STATUS_ARRAY_BOUNDS_EXCEEDED. |
|
Un point d’arrêt est rencontré. Cette valeur est définie comme STATUS_BREAKPOINT. |
|
Le thread tente de lire ou d’écrire des données mal alignées sur du matériel qui ne fournit pas d’alignement. Par exemple, les valeurs 16 bits doivent être alignées sur des limites de 2 octets, des valeurs de 32 bits sur des limites de 4 octets, etc. Cette valeur est définie comme STATUS_DATATYPE_MISALIGNMENT. |
|
L’un des opérandes d’une opération à virgule flottante est dénormal. Une valeur dénormale est une valeur qui est trop petite pour être représentée comme une valeur à virgule flottante standard. Cette valeur est définie comme STATUS_FLOAT_DENORMAL_OPERAND. |
|
Le thread tente de diviser une valeur à virgule flottante par un diviseur à virgule flottante de 0 (zéro). Cette valeur est définie comme STATUS_FLOAT_DIVIDE_BY_ZERO. |
|
Le résultat d’une opération à virgule flottante ne peut pas être représenté exactement sous la forme d’une fraction décimale. Cette valeur est définie comme STATUS_FLOAT_INEXACT_RESULT. |
|
Exception à virgule flottante qui n’est pas incluse dans cette liste. Cette valeur est définie comme STATUS_FLOAT_INVALID_OPERATION. |
|
L’exposant d’une opération à virgule flottante est supérieur à la magnitude autorisée par le type correspondant. Cette valeur est définie comme STATUS_FLOAT_OVERFLOW. |
|
La pile a débordé ou sous-flux, en raison d’une opération à virgule flottante. Cette valeur est définie comme STATUS_FLOAT_STACK_CHECK. |
|
L’exposant d’une opération à virgule flottante est inférieur à la magnitude autorisée par le type correspondant. Cette valeur est définie comme STATUS_FLOAT_UNDERFLOW. |
|
Le thread a accédé à la mémoire allouée avec le modificateur PAGE_GUARD. Cette valeur est définie comme STATUS_GUARD_PAGE_VIOLATION. |
|
Le thread tente d’exécuter une instruction non valide. Cette valeur est définie comme STATUS_ILLEGAL_INSTRUCTION. |
|
Le thread tente d’accéder à une page qui n’est pas présente et le système ne peut pas charger la page. Par exemple, cette exception peut se produire si une connexion réseau est perdue lors de l’exécution d’un programme sur un réseau. Cette valeur est définie comme STATUS_IN_PAGE_ERROR. |
|
Le thread tente de diviser une valeur entière par un diviseur entier de 0 (zéro). Cette valeur est définie comme STATUS_INTEGER_DIVIDE_BY_ZERO. |
|
Le résultat d’une opération d’entier crée une valeur trop grande pour être détenue par le registre de destination. Dans certains cas, cela entraîne l’exécution du bit le plus significatif du résultat. Certaines opérations ne définissent pas l’indicateur de portage. Cette valeur est définie comme STATUS_INTEGER_OVERFLOW. |
|
Un gestionnaire d’exceptions retourne une disposition non valide au répartiteur d’exceptions. Les programmeurs qui utilisent un langage de haut niveau comme C ne doivent jamais rencontrer cette exception. Cette valeur est définie comme STATUS_INVALID_DISPOSITION. |
|
Le thread a utilisé un handle pour un objet de noyau qui n’était pas valide (probablement parce qu’il avait été fermé.) Cette valeur est définie comme STATUS_INVALID_HANDLE. |
|
Le thread tente de poursuivre l’exécution après qu’une exception non continuable se produit. Cette valeur est définie comme STATUS_NONCONTINUABLE_EXCEPTION. |
|
Le thread tente d’exécuter une instruction avec une opération qui n’est pas autorisée en mode ordinateur actuel. Cette valeur est définie comme STATUS_PRIVILEGED_INSTRUCTION. |
|
Une interruption de trace ou un autre mécanisme d’instruction unique indique qu’une instruction est exécutée. Cette valeur est définie comme STATUS_SINGLE_STEP. |
|
Le thread utilise sa pile. Cette valeur est définie comme STATUS_STACK_OVERFLOW. |
|
Une consolidation de frame a été exécutée. |
Notes
La fonction GetExceptionCode peut être appelée uniquement à partir du bloc d’expression de filtre ou de gestionnaire d’exceptions d’un gestionnaire d’exceptions. L’expression de filtre est évaluée si une exception se produit pendant l’exécution du bloc __try et détermine si le bloc __except est exécuté ou non.
L’expression de filtre peut appeler une fonction de filtre. La fonction de filtre ne peut pas appeler GetExceptionCode. Toutefois, la valeur de retour de GetExceptionCode peut être passée en tant que paramètre à une fonction de filtre. La valeur de retour de la fonction GetExceptionInformation peut également être passée en tant que paramètre à une fonction de filtre. GetExceptionInformation retourne un pointeur vers une structure qui inclut les informations de code d’exception.
Quand des gestionnaires imbriqués existent, chaque expression de filtre est évaluée jusqu’à ce qu’une expression soit évaluée comme EXCEPTION_EXECUTE_HANDLER ou EXCEPTION_CONTINUE_EXECUTION. Chaque expression de filtre peut appeler GetExceptionCode pour obtenir le code d’exception.
Le code d’exception retourné est le code généré par une exception matérielle ou le code spécifié dans la fonction RaiseException pour une exception générée par logiciel.
Lors de la gestion de l’exception de point d’arrêt, il est important d’incrémenter le pointeur d’instruction dans l’enregistrement de contexte pour continuer à partir de cette exception.
Exemples
Pour obtenir un exemple, consultez Utilisation d’un gestionnaire d’exceptions.
Spécifications
Condition requise | Valeur |
---|---|
Client minimal pris en charge |
Windows XP [applications de bureau uniquement] |
Serveur minimal pris en charge |
Windows Server 2003 [applications de bureau uniquement] |
Voir aussi