SetErrorMode 函式 (errhandlingapi.h)
控制系統是否會處理指定的嚴重錯誤類型,或處理程式是否會處理這些錯誤。
語法
UINT SetErrorMode(
[in] UINT uMode
);
參數
[in] uMode
進程錯誤模式。 此參數可以是下列一或多個值。
值 | 意義 |
---|---|
|
使用系統預設值,也就是顯示所有錯誤對話方塊。 |
|
系統不會顯示嚴重錯誤處理程式訊息框。 相反地,系統會將錯誤傳送至呼叫進程。
最佳做法是所有應用程式都會在啟動時呼叫全進程 SetErrorMode 函式,且參數為 SEM_FAILCRITICALERRORS 。 這是為了防止錯誤模式對話框掛斷應用程式。 |
|
系統會自動修正記憶體對齊錯誤,並讓應用程式看不到這些錯誤。 它會針對呼叫進程和任何子代進程執行此動作。 這項功能僅受特定處理器架構支援。 如需詳細資訊,請參閱<備註>一節。
為進程設定這個值之後,會忽略後續嘗試清除值。 |
|
系統不會顯示 [Windows 錯誤報告] 對話框。 |
|
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 應用程式] |
目標平台 | Windows |
標頭 | errhandlingapi.h (包含 Windows.h) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應