Поделиться через


Макрос GetExceptionCode

Извлекает код, определяющий тип возникающего исключения. Функцию можно вызывать только из выражения фильтра или блока обработчика исключений обработчика исключений.

Примечание

Компилятор оптимизации Microsoft C/C++ интерпретирует эту функцию как ключевое слово, а его использование вне соответствующего синтаксиса обработки исключений приводит к ошибке компилятора.

 

Синтаксис

DWORD GetExceptionCode(void);

Параметры

Этот макрос не имеет параметров.

Возвращаемое значение

Возвращаемое значение определяет тип исключения. В следующей таблице указаны коды исключений, которые могут возникать из-за распространенных ошибок программирования. Эти значения определяются в WinBase.h и WinNT.h.

Код возврата Описание
EXCEPTION_ACCESS_VIOLATION
Поток пытается выполнить чтение или запись на виртуальный адрес, для которого у него нет доступа.
Это значение определяется как STATUS_ACCESS_VIOLATION.
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
Поток пытается получить доступ к элементу массива, который находится вне границ, а базовое оборудование поддерживает проверку границ.
Это значение определяется как STATUS_ARRAY_BOUNDS_EXCEEDED.
EXCEPTION_BREAKPOINT
Обнаружена точка останова.
Это значение определяется как STATUS_BREAKPOINT.
EXCEPTION_DATATYPE_MISALIGNMENT
Поток пытается считывать или записывать данные, которые неправильно настроены на оборудовании, которое не обеспечивает выравнивание. Например, 16-разрядные значения должны быть выровнены по 2-байтовых границам, 32-разрядным значениям на 4-байтовых границах и т. д.
Это значение определяется как STATUS_DATATYPE_MISALIGNMENT.
EXCEPTION_FLT_DENORMAL_OPERAND
Один из операндов в операции с плавающей запятой является денормальным. Денормальное значение — это слишком малое значение, которое представляется как стандартное значение с плавающей запятой.
Это значение определяется как STATUS_FLOAT_DENORMAL_OPERAND.
EXCEPTION_FLT_DIVIDE_BY_ZERO
Поток пытается разделить значение с плавающей запятой на делитель с плавающей запятой 0 (ноль).
Это значение определяется как STATUS_FLOAT_DIVIDE_BY_ZERO.
EXCEPTION_FLT_INEXACT_RESULT
Результат операции с плавающей запятой нельзя представить точно как десятичную дробь.
Это значение определяется как STATUS_FLOAT_INEXACT_RESULT.
EXCEPTION_FLT_INVALID_OPERATION
Исключение с плавающей запятой, которое не входит в этот список.
Это значение определяется как STATUS_FLOAT_INVALID_OPERATION.
EXCEPTION_FLT_OVERFLOW
Экспонент операции с плавающей запятой больше, чем величина, разрешенная соответствующим типом.
Это значение определяется как STATUS_FLOAT_OVERFLOW.
EXCEPTION_FLT_STACK_CHECK
Стек переполнен или переполнен из-за операции с плавающей запятой.
Это значение определяется как STATUS_FLOAT_STACK_CHECK.
EXCEPTION_FLT_UNDERFLOW
Экспонент операции с плавающей запятой меньше, чем величина, допустимая соответствующим типом.
Это значение определяется как STATUS_FLOAT_UNDERFLOW.
EXCEPTION_GUARD_PAGE
Поток обращается к памяти, выделенной модификатором PAGE_GUARD.
Это значение определяется как STATUS_GUARD_PAGE_VIOLATION.
EXCEPTION_ILLEGAL_INSTRUCTION
Поток пытается выполнить недопустимую инструкцию.
Это значение определяется как STATUS_ILLEGAL_INSTRUCTION.
EXCEPTION_IN_PAGE_ERROR
Поток пытается получить доступ к странице, которая отсутствует, и системе не удается загрузить страницу. Например, это исключение может произойти, если сетевое подключение потеряно при запуске программы по сети.
Это значение определяется как STATUS_IN_PAGE_ERROR.
EXCEPTION_INT_DIVIDE_BY_ZERO
Поток пытается разделить целочисленное значение на целочисленное делитель 0 (ноль).
Это значение определяется как STATUS_INTEGER_DIVIDE_BY_ZERO.
EXCEPTION_INT_OVERFLOW
Результат целочисленной операции создает слишком большое значение, которое будет храниться в целевом регистре. В некоторых случаях это приведет к выполнению наиболее значительного бита результата. Некоторые операции не задают флаг переноса.
Это значение определяется как STATUS_INTEGER_OVERFLOW.
EXCEPTION_INVALID_DISPOSITION
Обработчик исключений возвращает недопустимую ликвидацию диспетчеру исключений. Программисты, использующие высокоуровневый язык, например C, никогда не должны сталкиваться с этим исключением.
Это значение определяется как STATUS_INVALID_DISPOSITION.
EXCEPTION_INVALID_HANDLE
Поток использовал дескриптор для объекта ядра, который был недопустим (вероятно, потому что он был закрыт).)
Это значение определяется как STATUS_INVALID_HANDLE.
EXCEPTION_NONCONTINUABLE_EXCEPTION
Поток пытается продолжить выполнение после возникновения неконтенируемого исключения.
Это значение определяется как STATUS_NONCONTINUABLE_EXCEPTION.
EXCEPTION_PRIV_INSTRUCTION
Поток пытается выполнить инструкцию с операцией, которая не разрешена в текущем компьютерном режиме.
Это значение определяется как STATUS_PRIVILEGED_INSTRUCTION.
EXCEPTION_SINGLE_STEP
Ловушка трассировки или другой механизм одной инструкции сигнализирует о выполнении одной инструкции.
Это значение определяется как STATUS_SINGLE_STEP.
EXCEPTION_STACK_OVERFLOW
Поток использует свой стек.
Это значение определяется как STATUS_STACK_OVERFLOW.
STATUS_UNWIND_CONSOLIDATE
Выполнена консолидация кадров.

 

Комментарии

Функция GetExceptionCode может вызываться только из выражения фильтра или блока обработчика исключений обработчика исключений. Выражение фильтра вычисляется, если во время выполнения блока __try возникает исключение, и определяет, выполняется ли блок __except .

Выражение фильтра может вызвать функцию фильтра. Функция фильтра не может вызвать GetExceptionCode. Однако возвращаемое значение GetExceptionCode может быть передано в качестве параметра функции фильтра. Возвращаемое значение функции GetExceptionInformation также может быть передано в качестве параметра в функцию фильтра. GetExceptionInformation возвращает указатель на структуру, содержащую сведения о коде исключения.

Если существуют вложенные обработчики, каждое выражение фильтра вычисляется до тех пор, пока не будет оценено как EXCEPTION_EXECUTE_HANDLER или EXCEPTION_CONTINUE_EXECUTION. Каждое выражение фильтра может вызвать GetExceptionCode , чтобы получить код исключения.

Возвращаемый код исключения — это код, созданный аппаратным исключением, или код, указанный в функции RaiseException для программного созданного исключения.

При обработке исключения точки останова важно увеличить указатель инструкции в записи контекста, чтобы продолжить выполнение этого исключения.

Примеры

Пример см. в разделе "Использование обработчика исключений".

Требования

Требование Значение
Минимальная версия клиента
Windows XP [только классические приложения]
Минимальная версия сервера
Windows Server 2003 [только классические приложения]

См. также раздел

GetExceptionInformation

RaiseException

Структурированные функции обработки исключений

Общие сведения об обработке структурированных исключений