zoukankan      html  css  js  c++  java
  • [笔记]MSDN: SetErrorMode Function

    SetErrorMode Function

    Controls whether the system will handle the specified types of serious errors or whether the process will handle them.

    Syntax

    UINT WINAPI SetErrorMode(
      __in  UINT uMode
    );
    Parameters
    uMode [in]

    The process error mode. This parameter can be one or more of the following values.

    Value Meaning
    0 Use the system default, which is to display all error dialog boxes.
    SEM_FAILCRITICALERRORS
    0x0001

    The system does not display the critical-error-handler message box. Instead, the system sends the error to the calling process.

    Best practice is that all applications call the process-wide SetErrorMode function with a parameter of SEM_FAILCRITICALERRORS at startup. This is to prevent error mode dialogs from hanging the application.

    SEM_NOALIGNMENTFAULTEXCEPT
    0x0004

    The system automatically fixes memory alignment faults and makes them invisible to the application. It does this for the calling process and any descendant processes. This feature is only supported by certain processor architectures. For more information, see the Remarks section.

    After this value is set for a process, subsequent attempts to clear the value are ignored.

    SEM_NOGPFAULTERRORBOX
    0x0002
    The system does not display the Windows Error Reporting dialog.
    SEM_NOOPENFILEERRORBOX
    0x8000
    The system does not display a message box when it fails to find a file. Instead, the error is returned to the calling process.
    Return Value

    The return value is the previous state of the error-mode bit flags.

    Remarks

    Each process has an associated error mode that indicates to the system how the application is going to respond to serious errors. A child process inherits the error mode of its parent process. To retrieve the process error mode, use the GetErrorMode function.

    Because the error mode is set for the entire process, you must ensure that multi-threaded applications do not set different error-mode flags. Doing so can lead to inconsistent error handling.

    The system does not make alignment faults visible to an application on all processor architectures. Therefore, specifying SEM_NOALIGNMENTFAULTEXCEPT is not an error on such architectures, but the system is free to silently ignore the request. This means that code sequences such as the following are not always valid on x86 computers:

    SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT); 
    fuOldErrorMode = SetErrorMode(0); 
    ASSERT(fuOldErrorMode == SEM_NOALIGNMENTFAULTEXCEPT);

    Itanium:  An application must explicitly call SetErrorMode with SEM_NOALIGNMENTFAULTEXCEPT to have the system automatically fix alignment faults. The default setting is for the system to make alignment faults visible to an application.

    Visual Studio 2005:  When declaring a pointer to a structure that may not have aligned data, you can use the __unaligned keyword to indicate that the type must be read one byte at a time. For more information, see Windows Data Alignment.

    Windows 7: 

    Callers should favor SetThreadErrorMode over SetErrorMode since it is less disruptive to the normal behavior of the system.

    SetErrorMode函数放在程序前后可以防止系统乱蹦错误对话框[2]内有Delphi下调用的例子代码:

    var
      EMode: Word;
    begin
      EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
      // ShFormatDrive Code....
      SetErrorMode(EMode);
    end;

    参考:

    1. SetErrorMode Function
      http://msdn.microsoft.com/en-us/library/ms680621(v=vs.85).aspx
    2. Format a Win32 drive
      http://www.swissdelphicenter.ch/torry/showcode.php?id=226
    Technorati 标签: Delphi,SetErrorMode
  • 相关阅读:
    数据统计
    判断文件是否改变
    多列表统计之后的数组排序
    被弃用的php函数以及被那个代替
    curl数据采集
    MySQL教程
    使用多次join数据重复的问题
    ThinkPHP5高阶实战教程 --诠释为API开发而生
    SpringBoot使用thymeleaf模板
    SpringBoot与JPA
  • 原文地址:https://www.cnblogs.com/journeyonmyway/p/2119961.html
Copyright © 2011-2022 走看看