Partager via


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
EXCEPTION_ACCESS_VIOLATION
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.
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
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.
EXCEPTION_BREAKPOINT
Un point d’arrêt est rencontré.
Cette valeur est définie comme STATUS_BREAKPOINT.
EXCEPTION_DATATYPE_MISALIGNMENT
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.
EXCEPTION_FLT_DENORMAL_OPERAND
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.
EXCEPTION_FLT_DIVIDE_BY_ZERO
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.
EXCEPTION_FLT_INEXACT_RESULT
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_FLT_INVALID_OPERATION
Exception à virgule flottante qui n’est pas incluse dans cette liste.
Cette valeur est définie comme STATUS_FLOAT_INVALID_OPERATION.
EXCEPTION_FLT_OVERFLOW
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.
EXCEPTION_FLT_STACK_CHECK
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.
EXCEPTION_FLT_UNDERFLOW
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.
EXCEPTION_GUARD_PAGE
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.
EXCEPTION_ILLEGAL_INSTRUCTION
Le thread tente d’exécuter une instruction non valide.
Cette valeur est définie comme STATUS_ILLEGAL_INSTRUCTION.
EXCEPTION_IN_PAGE_ERROR
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.
EXCEPTION_INT_DIVIDE_BY_ZERO
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.
EXCEPTION_INT_OVERFLOW
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.
EXCEPTION_INVALID_DISPOSITION
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.
EXCEPTION_INVALID_HANDLE
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.
EXCEPTION_NONCONTINUABLE_EXCEPTION
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.
EXCEPTION_PRIV_INSTRUCTION
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.
EXCEPTION_SINGLE_STEP
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.
EXCEPTION_STACK_OVERFLOW
Le thread utilise sa pile.
Cette valeur est définie comme STATUS_STACK_OVERFLOW.
STATUS_UNWIND_CONSOLIDATE
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

GetExceptionInformation

RaiseException

Fonctions de gestion des exceptions structurées

Vue d’ensemble de la gestion structurée des exceptions