Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Извлекает код, определяющий тип возникающего исключения. Функцию можно вызывать только из выражения фильтра или блока обработчика исключений обработчика исключений.
Примечание
Компилятор оптимизации Microsoft C/C++ интерпретирует эту функцию как ключевое слово, а его использование вне соответствующего синтаксиса обработки исключений приводит к ошибке компилятора.
Синтаксис
DWORD GetExceptionCode(void);
Параметры
Этот макрос не имеет параметров.
Возвращаемое значение
Возвращаемое значение определяет тип исключения. В следующей таблице указаны коды исключений, которые могут возникать из-за распространенных ошибок программирования. Эти значения определяются в WinBase.h и WinNT.h.
Код возврата | Описание |
---|---|
|
Поток пытается выполнить чтение или запись на виртуальный адрес, для которого у него нет доступа. Это значение определяется как STATUS_ACCESS_VIOLATION. |
|
Поток пытается получить доступ к элементу массива, который находится вне границ, а базовое оборудование поддерживает проверку границ. Это значение определяется как STATUS_ARRAY_BOUNDS_EXCEEDED. |
|
Обнаружена точка останова. Это значение определяется как STATUS_BREAKPOINT. |
|
Поток пытается считывать или записывать данные, которые неправильно настроены на оборудовании, которое не обеспечивает выравнивание. Например, 16-разрядные значения должны быть выровнены по 2-байтовых границам, 32-разрядным значениям на 4-байтовых границах и т. д. Это значение определяется как STATUS_DATATYPE_MISALIGNMENT. |
|
Один из операндов в операции с плавающей запятой является денормальным. Денормальное значение — это слишком малое значение, которое представляется как стандартное значение с плавающей запятой. Это значение определяется как STATUS_FLOAT_DENORMAL_OPERAND. |
|
Поток пытается разделить значение с плавающей запятой на делитель с плавающей запятой 0 (ноль). Это значение определяется как STATUS_FLOAT_DIVIDE_BY_ZERO. |
|
Результат операции с плавающей запятой нельзя представить точно как десятичную дробь. Это значение определяется как STATUS_FLOAT_INEXACT_RESULT. |
|
Исключение с плавающей запятой, которое не входит в этот список. Это значение определяется как STATUS_FLOAT_INVALID_OPERATION. |
|
Экспонент операции с плавающей запятой больше, чем величина, разрешенная соответствующим типом. Это значение определяется как STATUS_FLOAT_OVERFLOW. |
|
Стек переполнен или переполнен из-за операции с плавающей запятой. Это значение определяется как STATUS_FLOAT_STACK_CHECK. |
|
Экспонент операции с плавающей запятой меньше, чем величина, допустимая соответствующим типом. Это значение определяется как STATUS_FLOAT_UNDERFLOW. |
|
Поток обращается к памяти, выделенной модификатором PAGE_GUARD. Это значение определяется как STATUS_GUARD_PAGE_VIOLATION. |
|
Поток пытается выполнить недопустимую инструкцию. Это значение определяется как STATUS_ILLEGAL_INSTRUCTION. |
|
Поток пытается получить доступ к странице, которая отсутствует, и системе не удается загрузить страницу. Например, это исключение может произойти, если сетевое подключение потеряно при запуске программы по сети. Это значение определяется как STATUS_IN_PAGE_ERROR. |
|
Поток пытается разделить целочисленное значение на целочисленное делитель 0 (ноль). Это значение определяется как STATUS_INTEGER_DIVIDE_BY_ZERO. |
|
Результат целочисленной операции создает слишком большое значение, которое будет храниться в целевом регистре. В некоторых случаях это приведет к выполнению наиболее значительного бита результата. Некоторые операции не задают флаг переноса. Это значение определяется как STATUS_INTEGER_OVERFLOW. |
|
Обработчик исключений возвращает недопустимую ликвидацию диспетчеру исключений. Программисты, использующие высокоуровневый язык, например C, никогда не должны сталкиваться с этим исключением. Это значение определяется как STATUS_INVALID_DISPOSITION. |
|
Поток использовал дескриптор для объекта ядра, который был недопустим (вероятно, потому что он был закрыт).) Это значение определяется как STATUS_INVALID_HANDLE. |
|
Поток пытается продолжить выполнение после возникновения неконтенируемого исключения. Это значение определяется как STATUS_NONCONTINUABLE_EXCEPTION. |
|
Поток пытается выполнить инструкцию с операцией, которая не разрешена в текущем компьютерном режиме. Это значение определяется как STATUS_PRIVILEGED_INSTRUCTION. |
|
Ловушка трассировки или другой механизм одной инструкции сигнализирует о выполнении одной инструкции. Это значение определяется как STATUS_SINGLE_STEP. |
|
Поток использует свой стек. Это значение определяется как STATUS_STACK_OVERFLOW. |
|
Выполнена консолидация кадров. |
Комментарии
Функция GetExceptionCode может вызываться только из выражения фильтра или блока обработчика исключений обработчика исключений. Выражение фильтра вычисляется, если во время выполнения блока __try возникает исключение, и определяет, выполняется ли блок __except .
Выражение фильтра может вызвать функцию фильтра. Функция фильтра не может вызвать GetExceptionCode. Однако возвращаемое значение GetExceptionCode может быть передано в качестве параметра функции фильтра. Возвращаемое значение функции GetExceptionInformation также может быть передано в качестве параметра в функцию фильтра. GetExceptionInformation возвращает указатель на структуру, содержащую сведения о коде исключения.
Если существуют вложенные обработчики, каждое выражение фильтра вычисляется до тех пор, пока не будет оценено как EXCEPTION_EXECUTE_HANDLER или EXCEPTION_CONTINUE_EXECUTION. Каждое выражение фильтра может вызвать GetExceptionCode , чтобы получить код исключения.
Возвращаемый код исключения — это код, созданный аппаратным исключением, или код, указанный в функции RaiseException для программного созданного исключения.
При обработке исключения точки останова важно увеличить указатель инструкции в записи контекста, чтобы продолжить выполнение этого исключения.
Примеры
Пример см. в разделе "Использование обработчика исключений".
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows XP [только классические приложения] |
Минимальная версия сервера |
Windows Server 2003 [только классические приложения] |
См. также раздел