SetErrorMode功能控制操作系统处理多种严重错误的方式。您可以指定操作系统将处理这些错误或应用程序将接收和处理它们。
UINT SetErrorMode(
UINT 【U模式】 | //指定错误处理属性的位标志集 |
); |
参数
【U模式】
一组指定系统错误处理属性的位标志。定义了以下错误模式位标志常量;您可以设置它们的任意组合:
值 | 行动 |
SEM_FAILCRITICALERRORS | 如果设置了此标志,则出现此错误时,操作系统不会显示关键错误处理程序消息框。相反,操作系统将错误发送到调用进程。 |
SEM_NOALIGNMENTFAULTEXCEPT | 如果设置此标志,操作系统将自动修复内存对齐错误,使其不可见。它为调用进程和任何后代进程执行此操作。 这个标志总是影响MIPS处理器。它对x86处理器没有影响。 如果注册表值\\ CurrentControlSet \\ Control \\ Session Manager:EnableAlignmentFaultExceptions设置为REG_DWORD 0x0,则此键对ALPHA处理器没有影响。那就是系统默认。如果注册表项设置为REG_DWORD 0x1,则SEM_NOALIGNMENTFAULTEXCEPT标志确实影响ALPHA处理器。 |
SEM_NOGPFAULTERRORBOX | 如果设置此标志,则出现此错误时,操作系统不会显示通用保护故障消??息框。该标志应【只要】通过调试通过适当的异常处理程序自身处理一般保护(GP)故障的应用程序来设置。 |
SEM_NOOPENFILEERRORBOX | 如果设置了此标志,则当找不到文件时,操作系统不会显示消息框。而是将错误返回给调用进程。 |
返回值
返回值是错误模式位标志的先前状态。
备注
子进程继承其父进程的错误模式。
此函数设置的错误模式属性的默认状态为OFF。
在某些非x86处理器上,对齐内存引用导致对齐错误异常。SEM_NOALIGNMENTFAULTEXCEPT标志允许您控制操作系统是否自动修复此类对齐错误,或使其对应用程序可见。
SEM_NOALIGNMENTFAULTEXCEPT标志始终影响MIPS处理器。它永远不会影响x86处理器。仅当注册表项\\ CurrentControlSet \\ Control \\ Session Manager:EnableAlignmentFaultExceptions设置为REG_DWORD 0x1时才会影响ALPHA处理器。该注册表项的默认设置为REG_DWORD 0x0。
在x86平台上,应用程序不需要执行任何操作系统自动修复未对齐的内存引用。操作系统不会使对齐错误对应用程序可见。
在MIPS平台上,应用程序必须显式调用SetErrorMode,设置SEM_NOALIGNMENTFAULTEXCEPT标志,使操作系统自动修复对齐错误。默认设置是使操作系统使对齐错误对应用程序可见。
在ALPHA平台上,除非上述注册表项设置为REG_DWORD 0x1,否则操作系统会自动修复对齐错误。当该注册表项设置为REG_DWORD 0x1时,操作系统使对齐错误对应用程序可见,然后应用程序必须调用SetErrorMode才能使操作系统自动修复对齐错误。
在x86系统上指定SEM_NOALIGNMENTFAULTEXCEPT标志不是错误,但Windows NT的实现可以自由地忽略并且不正确地保留该标志。这意味着以下代码序列在x86系统上并不总是有效:
SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT);
fuOldErrorMode = SetErrorMode(0);
ASSERT(fuOldErrorMode == SEM_NOALIGNMENTFAULTEXCEPT);