Описания функций обработки ошибок и исключений
В табл. 26.1 перечисляются функции Windows API, связанные с обработкой ошибок и исключений. Затем следуют полные описания функций.
Таблица 26.1 Список функций обработки ошибок и исключений____________________
Функция |
Описание |
|||||||||||||||||||||
AbnormalTermination |
Определяет, завершено ли выполнение предыдущего try-блока |
|||||||||||||||||||||
Веер |
Воспроизводит стандартный звуковой сигнал |
|||||||||||||||||||||
GetExceptionCode |
Определяет код исключения в функции фильтра |
|||||||||||||||||||||
GetExceptionlnformation |
Извлекает информацию о контексте процессора и памяти, когда возникает исключение |
|||||||||||||||||||||
Функция |
Описание |
|||||||||||||||||||||
GetLastError |
Возвращает код ошибки из локальной области хранения потока |
|||||||||||||||||||||
SetErrorMode |
Изменяет режим выявления ошибок системой |
|||||||||||||||||||||
SefLastError |
Устанавливает код ошибки локальной области хранения потока |
|||||||||||||||||||||
SetLastErrorEx |
Устанавливает код и категорию ошибки в локальной области хранения потока |
|||||||||||||||||||||
AbnormalTermination • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
AbnormalTermination указывает, нормально ли завершен try-блок оператора try.. -finally. Эта функция может вызываться только из блока finally оператора try.. .finally, try-блок завершается нормально только в случае, когда выход из него осуществляется непосредственно после выполнения последнего оператора блока. Реализующие выход из блока операторы, такие как return, goto, continue и break, вызывают аварийное завершение блока (т.е. abnormal termination). Аварийное завершение try-блока может привести к тому, что система будет вести обратный поиск во всех фреймах стека для определения необходимости вызова обработчиков завершения. Это может снизить эффективность программы. Поэтому следует избегать аварийных завершений в try-блоках. |
|||||||||||||||||||||
Синтаксис |
BOOL AbnormalTermination( VOID ) |
|||||||||||||||||||||
Параметры |
Функция не имеет параметров. |
|||||||||||||||||||||
Возвращаемое значение |
BOOL: Если try-блок завершен аварийно, возвращается значение TRUE, в противном случае — FALSE. |
|||||||||||||||||||||
Включаемый файл |
excpt.h |
|||||||||||||||||||||
См. также |
GetExceptionCode, GetExceptionlnformation |
|||||||||||||||||||||
Пример |
Следующий пример демонстрирует, перехват исключении в системе, а также получение информации о состоянии системы. Когда пользователь выбирает в примере пункт меню Test!, возбуждается программное, а затем аппаратное исключение. Исключения обнаруживаются, соответственно, обработчиком исключений и обработчиком завершения. Функция AbnormalTermination используется в обработчике завершения для предупреждения пользователя о том, что текущая операция не может быть нормально завершена. |
|||||||||||||||||||||
См. \local-sources\chap26\26-01.txt |
||||||||||||||||||||||
Веер • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция Веер описана в Win32 API для воспроизведения сигналов динамика определенной частоты и продолжительности. В Windows 95 Веер воспроизводит только стандартный звуковой сигнал. |
|||||||||||||||||||||
Синтаксис |
BOOL Beep( DWORD dwFreq, DWORD dwDuration ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
dwFreq |
DWORD: Частота звука, выраженная в герцах, или циклах в секунду. Допустимый диапазон составляет от 37 до 32767 (от 0x25 до Ox7fff). В Windows 9х этот параметр игнорируется. |
|||||||||||||||||||||
dwDuration |
DWORD: Продолжительность в миллисекундах. Если параметр dwDuration имеет значение -1, звук воспроизводится до тех пор, пока сигнал динамика не будет перепрограммирован. В Windows 9x этот параметр игнорируется. |
|||||||||||||||||||||
Возвращаемое значение |
BOOL: При успешном выполнении возвращается TRUE, в противном случае — FALSE. Для возврата кода ошибки используется функция GetLastError. |
|||||||||||||||||||||
Включаемый файл |
winbase.h |
|||||||||||||||||||||
См. также |
GetLastError |
|||||||||||||||||||||
Пример |
См. пример приведенный в описании функции AbnormalTermination. |
|||||||||||||||||||||
GetExceptionCode • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция GetExceptionCode извлекает код, который идентифицирует тип возникшего исключения. Приложение может вызывать эту функцию из выражения фильтра либо блока обработчика исключений try.. .except. |
|||||||||||||||||||||
Синтаксис |
DWORD GetExceptionCode( VOID ) |
|||||||||||||||||||||
Параметры |
Функция не содержит параметров. |
|||||||||||||||||||||
Возвращаемое значение |
DWORD: Тип возвращаемого исключения. В табл. 26.2 перечислены типичные аппаратные исключения. Кроме того, функция GetExceptionCode выявляет программные исключения, сгенерированные RaiseException (об этом речь шла в главе 25). |
|||||||||||||||||||||
Таблица 26.2 Стандартные аппаратные исключения |
||||||||||||||||||||||
Константа кола исключения |
Описание |
|||||||||||||||||||||
STATUS_ACCESS_VIOLATION |
Попытка чтения или записи по недоступному адресу памяти. Кроме того, это может быть попытка обработки данных или записи в кодовую страницу с недопустимым селектором. |
|||||||||||||||||||||
STATUS_BREAKPOINT |
Аппаратно задаваемая точка останова (только для отладчиков). |
|||||||||||||||||||||
STATUS_FLOATING_DIVIDE_BY_ZERO |
Происходит при попытке деления значения с плавающей точкой (float) на 0.0. |
|||||||||||||||||||||
STATUS_FLOATING_OVERFLOW |
Происходит при переполнении положительного значения экспоненты значения с плавающей точкой. |
|||||||||||||||||||||
STATUS_FLOATING_UNDERFLOW |
Происходит при переполнении отрицательного значения экспоненты значения с плавающей точкой. |
|||||||||||||||||||||
STATUSJLLEGALJNSTRUCTION |
Выполнение недопустимой команды. |
|||||||||||||||||||||
STATUS_INTEGER_DIVIDE_BY_ZERO |
Деление целого значения на ноль. |
|||||||||||||||||||||
STATUS_INTEGER_OVERFLOW |
Происходит, когда превышается диапазон целого значения. |
|||||||||||||||||||||
STATUS_PRIVILEGED_INSTRUCTION |
Выполнение приоритетной команды вне кода Ring-0 (нулевого кольца защиты). |
|||||||||||||||||||||
STATUS_SINGLE_STEP |
Выполнение единственного шага (только для отладчиков). |
|||||||||||||||||||||
Включаемый файл |
excpt.h |
|||||||||||||||||||||
См. также |
RaiseException, GetExceptionlnformation, UnhandledExceptionFilter, SetLJnhandledExceptioii Filter |
|||||||||||||||||||||
Пример |
См. пример, приведенный в описании функции AbnornialTerniinatioa |
|||||||||||||||||||||
GetExceptionlnformation • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция GetExceptionlnformation возвращает указатели на структуры, описывающие состояние системы и выполняемого потока во время, когда произошло исключение. Приложение может вызывать эту функцию только из выражения фильтра обработчика исключений try.. .except. |
|||||||||||||||||||||
Синтаксис |
LPEXCEPTION_POINTERS GetExceptionInformation( VOID ) |
|||||||||||||||||||||
Параметры |
Функция не имеет параметров. |
|||||||||||||||||||||
Возвращаемое значение |
LPEXCEPTION_POINTERS: Указатель на структуру EXCEPTION_POINTERS, которая содержит указатель на структуру CONTEXT, описывающую систему на момент исключения, а также указатель на структуру EXCEPTION_RECORD, описывающую условия исключения. Описания структур EXCEPTION_RECORD и EXCEPTION_POINTERS приводятся ниже. Структура CONTEXT представляет собой данные регистров процессора. Описание этой структуры содержится в файле заголовков WINNT.H. |
|||||||||||||||||||||
Включаемый файл |
excpt.h |
|||||||||||||||||||||
См. также |
GetExceptionCode, UnhandledExceptionFilter, SetUnhandledExceptionFilter |
|||||||||||||||||||||
Описание струк туры EXCEPTION_POINTERS typedef struct _EXCEPTION_POINTERS { PEXCEPTION_RECORD ExceptionRecord ; PCONTEXT ContextRecord; } EXCEPTION_POINTERS , *LPEXCEPTION_POINTERS |
||||||||||||||||||||||
Члены |
||||||||||||||||||||||
ExceptionRecord |
PEXCEPTION_RECORu: указатель на структуру EXCEPTION_RECORD. Описание этой структуры приводится ниже. |
|||||||||||||||||||||
ContextRecord |
PCONTEXT: Указатель на структуру CONTEXT. Ее описание содержится в файле заголовков WINNT.H. |
|||||||||||||||||||||
Описание струк туры EXCEPTION_RECORD typedef struct EXCEPTION RECORD { DWORD ExceptionCode ; DWORD ExceptionFlags ; struct _EXCEPTION_RECORD *ExceptiOBft*COrd; PVOID ExceptionAddress; DWORD NumberParameters ; UINT PTR Exceptionlnf ormation [EXCEPTION_MAXIMUM_PMWMETERS] ; } EXCEPTION_RECORD, *PEXCEPTION_RECORD; |
||||||||||||||||||||||
Члены |
||||||||||||||||||||||
ExceptionCode |
DWORD: Причина исключения. Это код, сгенерированный аппаратным исключением, либо код, указанный в функции RaiseException для программно сгенерированного исключения. |
|||||||||||||||||||||
Exception Flags |
DWORD: Флаги исключения. Этот член может принимать 0, указывающий на продолжаемое исключение, либо значение EXCEPTIONJ4ONCON-TINUABLE, указывающее на непродолжаемое исключение. |
|||||||||||||||||||||
ExceptionRecord |
EXCEPTION_RECORD*: Указатель на связанную структуру EXCEPTION_RECORD. Возможно последовательное расположение записей исключений для предоставления дополнительной информации, когда происходят вложенные исключения. |
|||||||||||||||||||||
ExceptionAddress |
PVOID: Адрес, где произошло исключение. |
|||||||||||||||||||||
NumberParameters |
DWORD: Количество параметров, связанных с исключением. Совпадает с количеством элементов, описанных в массиве Exception Information. |
|||||||||||||||||||||
ExceptionInformation |
UINT_PTR[EXCEPTION_MAXIMUM_PARAMETERS]: Массив дополнительных 32-разрядных аргументов, описывающих исключение. Этот массив аргументов определять функция RaiseException может. |
|||||||||||||||||||||
Пример |
См. пример, приведенный в описании функции AbnormalTermination. |
|||||||||||||||||||||
GetLastError • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция GetLastError возвращает последнюю ошибку, установленную системой в локальной области хранения потока. Функция зависит от потока. Это означает, что ошибки не распространяются между потоками процесса. GetLastError следует вызывать непосредственно после того, как значение возврата функции укажет, что такой вызов сгенерирует важные данные. По этой причине некоторые функции вызывают SetLastError(O) при успешном выполнении, удаляя код ошибки, сгенерированный последней функцией, выдавшей сбой. Большинство функций Win32 API, устанавливающих код последней ошибки потока, осуществляют эту операцию при сбоях. Для определения кода возврата, указывающего на сбой, следует обратиться к документации по данной функции. |
|||||||||||||||||||||
Синтаксис |
DWORD GetLastError( VOID ) |
|||||||||||||||||||||
Параметры |
Функция не имеет параметров. |
|||||||||||||||||||||
Возвращаемое значение |
DWORD: Код последней ошибки для вызывающего потока, установленный SetLastError. |
|||||||||||||||||||||
Включаемый файл |
winbase.h |
|||||||||||||||||||||
См. также |
SetLastError, SetLastErrorEx |
|||||||||||||||||||||
Пример |
Следующий пример демонстрирует создание функции, которая устанавливает собственную ошибку через SetLastError 'и извлекает код ошибки после того, как функция генерирует возврат при помощи GetLastError. |
|||||||||||||||||||||
См. \local-sources \chap26\26-02 . txt |
||||||||||||||||||||||
SetErrorMode • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция SetErrorMode изменяет поведение системы при обработке определенных условий ошибок. При этом дочерние процессы наследуют режим родительского процесса. |
|||||||||||||||||||||
Синтаксис |
UINT SetErrorMode( UINT uNewErrorMode ) |
|||||||||||||||||||||
Параметры |
,-.-:. - |
|||||||||||||||||||||
uNewErrorMode |
UINT: Вновь устанавливаемый режим обработки ошибок. Список значений этого параметра приводится в табл. 26.3. |
|||||||||||||||||||||
Таблица 26.3 Значения параметра uNewErrorMode функции SetErrorMode |
||||||||||||||||||||||
Режим ошибок |
Описание |
|||||||||||||||||||||
0 |
Устанавливается в системе по умолчанию. Отображаются все диалоговые окна сообщений об ошибках. |
|||||||||||||||||||||
SEM FAILCRITICALERRORS |
Отключает критические ошибки, такие как неготовность диска. Ошибки отправляются вызывающему процессу. |
|||||||||||||||||||||
SEM_NOALIGNMENTFAULTEXCEPT |
Указывает, что для определенных процессоров Windows автоматически исправляет ошибки распределения памяти и скрывает их. |
|||||||||||||||||||||
SEM_NOGPFAULTERRORBOX |
Отключает отображение окна ошибки общей защиты, в котором выводятся сведения об условии исключения. Должно устанавливаться только в случае, когда приложение может предоставить больше информации, нежели стандартный интерфейс GPF-окон сообщений. |
|||||||||||||||||||||
SEM_NOOPENFILEERRORBOX |
Отключает окно сообщений, отображаемое в случае невозможности нахождения файла. Ошибка возвращается вызывающему процессу. |
|||||||||||||||||||||
Возвращаемое значение UINT: Предыдущий режим. |
||||||||||||||||||||||
Включаемый файл |
winbase.h |
|||||||||||||||||||||
См. также |
SetUnhandledExceptionFilter, UnhandledExceptionFilter |
|||||||||||||||||||||
SetLastError • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция SetLastError устанавливает код последней ошибки для вызывающего потока. Затем приложение может обратиться к функции GetLastError для получения кода ошибки. |
|||||||||||||||||||||
Синтаксис , |
VOID SetLastError( DWORD dwErrorCode ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
dwErrorCode |
DWORD: Устанавливаемый код ошибки. Разряд 29 зарезервирован для определяемых приложением кодов ошибок, которые не конфликтуют с системными кодами ошибок. |
|||||||||||||||||||||
Включаемый файл |
winbase.h |
|||||||||||||||||||||
См. также |
SetLastErrorEx |
|||||||||||||||||||||
Пример |
Пример содержится в описании функции GetLastError. |
|||||||||||||||||||||
SetLastErrorEx • Windows 98 • Windows 2000 |
||||||||||||||||||||||
Описание |
Функция SetLastErrorEx устанавливает код последней ошибки. Она идентична функции SetLastError. Второй параметр в настоящее время не реализован. |
|||||||||||||||||||||
Синтаксис |
VOID SetLastErrorEx( DWORD dwErrorCode, DWORD dwErrorType ) |
|||||||||||||||||||||
Параметры |
||||||||||||||||||||||
dwErrorCode |
DWORD: Устанавливаемый код ошибки. Разряд 29 зарезервирован для определяемых приложением кодов ошибок, которые не конфликтуют с системными кодами ошибок. |
|||||||||||||||||||||
dwErrorType |
DWORD: Тип ошибки. Если процесс находится в состоянии отладки, отладчик может предпринять определенные действия в зависимости от типа ошибки. Если параметр не равен 0, может принимать любое из перечисленных в табл. 26.4 значений. |
|||||||||||||||||||||
Таблица 26.4 Значения параметра dwErrorType функции SetLastErrorEx |
||||||||||||||||||||||
Тип ошибки |
Описание |
|||||||||||||||||||||
SLE_ERROR |
Функция приняла недопустимые данные и ее выполнение невозможно. |
|||||||||||||||||||||
SLE_MINORERROR |
Функция приняла недопустимые данные и выполнение восстановлено. |
|||||||||||||||||||||
SLE_WARNING |
Функция приняла потенциально ошибочные данные, но ее выполнение восстановлено. |
|||||||||||||||||||||
Включаемый файл |
winbase.h |
|||||||||||||||||||||
См. также |
GetLastError, SetLastError |
|||||||||||||||||||||
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.