Функция SetErrorMode (errhandlingapi.h)
Определяет, обрабатывает ли система или процесс указанные типы серьезных ошибок.
Синтаксис
UINT SetErrorMode(
[in] UINT uMode
);
Параметры
[in] uMode
Режим ошибки процесса. Этот параметр может быть одним или несколькими из следующих значений.
Ценность | Значение |
---|---|
|
Используйте системное значение по умолчанию, в котором отображаются все диалоговые окна ошибок. |
|
Система не отображает окно сообщения с критически важным обработчиком ошибок. Вместо этого система отправляет ошибку в вызывающий процесс.
Рекомендуется, чтобы все приложения вызывали функцию SetErrorMode с параметром SEM_FAILCRITICALERRORS при запуске. Это позволяет предотвратить зависание приложения в диалоговом окне режима ошибки. |
|
Система автоматически исправляет ошибки выравнивания памяти и делает их невидимыми для приложения. Это делается для вызывающего процесса и любых процессов-потомков. Эта функция поддерживается только некоторыми архитектурами процессора. Дополнительные сведения см. в разделе "Примечания".
После установки этого значения для процесса последующие попытки очистить значение игнорируются. |
|
Система не вызывает отчеты об ошибках Windows. Чтобы отключить пользовательский интерфейс отчетов об ошибках Windows, вызовите WerSetFlags с флагом WER_FAULT_REPORTING_NO_UI. |
|
Функция OpenFile не отображает окно сообщения, если не удается найти файл. Вместо этого ошибка возвращается вызывающей объекту. Этот режим ошибки переопределяет флаг OF_PROMPT. |
Возвращаемое значение
Возвращаемое значение — это предыдущее состояние битовых флагов в режиме ошибки.
Замечания
Каждый процесс имеет связанный режим ошибки, указывающий системе, как приложение будет реагировать на серьезные ошибки. Дочерний процесс наследует режим ошибки родительского процесса. Чтобы получить режим ошибки процесса, используйте функцию getErrorMode
Так как для всего процесса задан режим ошибки, необходимо убедиться, что многопоточное приложение не устанавливает разные флаги режима ошибки. Это может привести к несогласованной обработке ошибок.
Система не делает сбои выравнивания, видимые для приложения во всех архитектурах процессора. Таким образом, указание SEM_NOALIGNMENTFAULTEXCEPT не является ошибкой в таких архитектурах, но система может автоматически игнорировать запрос. Это означает, что последовательности кода, такие как следующие, не всегда допустимы на компьютерах x86:
C++ |
---|
SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT); fuOldErrorMode = SetErrorMode(0); ASSERT(fuOldErrorMode == 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 |