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


Функция SetErrorMode (errhandlingapi.h)

Определяет, обрабатывает ли система или процесс указанные типы серьезных ошибок.

Синтаксис

UINT SetErrorMode(
  [in] UINT uMode
);

Параметры

[in] uMode

Режим ошибки процесса. Этот параметр может быть одним или несколькими из следующих значений.

Ценность Значение
0
Используйте системное значение по умолчанию, в котором отображаются все диалоговые окна ошибок.
SEM_FAILCRITICALERRORS
0x0001
Система не отображает окно сообщения с критически важным обработчиком ошибок. Вместо этого система отправляет ошибку в вызывающий процесс.

Рекомендуется, чтобы все приложения вызывали функцию SetErrorMode с параметром SEM_FAILCRITICALERRORS при запуске. Это позволяет предотвратить зависание приложения в диалоговом окне режима ошибки.

SEM_NOALIGNMENTFAULTEXCEPT
0x0004
Система автоматически исправляет ошибки выравнивания памяти и делает их невидимыми для приложения. Это делается для вызывающего процесса и любых процессов-потомков. Эта функция поддерживается только некоторыми архитектурами процессора. Дополнительные сведения см. в разделе "Примечания".

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

SEM_NOGPFAULTERRORBOX
0x0002
Система не вызывает отчеты об ошибках Windows. Чтобы отключить пользовательский интерфейс отчетов об ошибках Windows, вызовите WerSetFlags с флагом WER_FAULT_REPORTING_NO_UI.
SEM_NOOPENFILEERRORBOX
0x8000
Функция OpenFile не отображает окно сообщения, если не удается найти файл. Вместо этого ошибка возвращается вызывающей объекту. Этот режим ошибки переопределяет флаг OF_PROMPT.

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

Возвращаемое значение — это предыдущее состояние битовых флагов в режиме ошибки.

Замечания

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

Так как для всего процесса задан режим ошибки, необходимо убедиться, что многопоточное приложение не устанавливает разные флаги режима ошибки. Это может привести к несогласованной обработке ошибок.

Система не делает сбои выравнивания, видимые для приложения во всех архитектурах процессора. Таким образом, указание SEM_NOALIGNMENTFAULTEXCEPT не является ошибкой в таких архитектурах, но система может автоматически игнорировать запрос. Это означает, что последовательности кода, такие как следующие, не всегда допустимы на компьютерах x86:

C++
SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT); 
fuOldErrorMode = SetErrorMode(0); 
ASSERT(fuOldErrorMode == SEM_NOALIGNMENTFAULTEXCEPT);
Itanium: приложение должно явно вызывать SetErrorMode с SEM_NOALIGNMENTFAULTEXCEPT, чтобы система автоматически исправляла ошибки выравнивания. Параметр по умолчанию предназначен для системы, чтобы сделать выравнивание видимыми для приложения.

Visual Studio 2005: При объявлении указателя на структуру, которая, возможно, не имеет выравнивания данных, можно использовать ключевое слово __unaligned, чтобы указать, что тип должен быть считывается по одному байту за раз. Дополнительные сведения см. в разделе Выравнивание данных Windows.

Windows 7: вызовы должны использовать SetThreadErrorMode по сравнению с SetErrorMode, так как это менее нарушает нормальное поведение системы.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2003 [классические приложения | Приложения UWP]
целевая платформа Виндоус
заголовка errhandlingapi.h (включая Windows.h)
библиотеки Kernel32.lib
DLL Kernel32.dll

См. также

функции обработки ошибок

режим ошибки

GetErrorMode

SetThreadErrorMode