SetErrorMode 函式 (errhandlingapi.h)

控制系統是否會處理指定的嚴重錯誤類型,或處理程式是否會處理這些錯誤。

語法

UINT SetErrorMode(
  [in] UINT uMode
);

參數

[in] uMode

進程錯誤模式。 此參數可以是下列一或多個值。

意義
0
使用系統預設值,也就是顯示所有錯誤對話方塊。
SEM_FAILCRITICALERRORS
0x0001
系統不會顯示嚴重錯誤處理程式訊息框。 相反地,系統會將錯誤傳送至呼叫進程。

最佳做法是所有應用程式都會在啟動時呼叫全進程 SetErrorMode 函式,且參數為 SEM_FAILCRITICALERRORS 。 這是為了防止錯誤模式對話框掛斷應用程式。

SEM_NOALIGNMENTFAULTEXCEPT
0x0004
系統會自動修正記憶體對齊錯誤,並讓應用程式看不到這些錯誤。 它會針對呼叫進程和任何子代進程執行此動作。 這項功能僅受特定處理器架構支援。 如需詳細資訊,請參閱<備註>一節。

為進程設定這個值之後,會忽略後續嘗試清除值。

SEM_NOGPFAULTERRORBOX
0x0002
系統不會顯示 [Windows 錯誤報告] 對話框。
SEM_NOOPENFILEERRORBOX
0x8000
OpenFile 函式在找不到檔案時不會顯示消息框。 相反地,錯誤會傳回給呼叫端。 此錯誤模式會覆寫 OF_PROMPT 旗標。

傳回值

傳回值是錯誤模式位旗標的先前狀態。

備註

每個進程都有相關聯的錯誤模式,指出應用程式如何回應嚴重錯誤。 子進程會繼承其父進程的錯誤模式。 若要擷取行程錯誤模式,請使用 GetErrorMode 函式。

由於已針對整個進程設定錯誤模式,因此您必須確定多線程應用程式不會設定不同的錯誤模式旗標。 這麼做可能會導致錯誤處理不一致。

系統不會讓所有處理器架構上的應用程式看到對齊錯誤。 因此,在這類架構上指定SEM_NOALIGNMENTFAULTEXCEPT不是錯誤,但系統可以無訊息地忽略要求。 這表示下列程式代碼序列在 x86 電腦上不一定有效:

C++
SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT); 
fuOldErrorMode = SetErrorMode(0); 
ASSERT(fuOldErrorMode == SEM_NOALIGNMENTFAULTEXCEPT);
Itanium: 應用程式必須明確呼叫具有SEM_NOALIGNMENTFAULTEXCEPT的 SetErrorMode ,才能讓系統自動修正對齊錯誤。 默認設定是讓系統能夠讓應用程式看見對齊錯誤。

Visual Studio 2005: 宣告可能沒有對齊數據之結構的指標時,您可以使用 __unaligned 關鍵詞來指出一次必須讀取一個字節的類型。 如需詳細資訊,請參閱 Windows 數據對齊

Windows 7: 呼叫端應該偏好 SetThreadErrorMode 而非 SetErrorMode ,因為它對系統的一般行為較不干擾。

規格需求

需求
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 errhandlingapi.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

錯誤處理函式

錯誤模式

GetErrorMode

SetThreadErrorMode