下圖顯示 HRESULT 的格式(或 SCODE):數字表示位元位置:
HRESULT 或 SCODE 中的高階位會指出傳回值是否代表成功或失敗。 如果設定為 0,SEVERITY_SUCCESS,則值表示成功。 如果設定為 1,SEVERITY_ERROR,表示失敗。
R、C、N 和 r 位元被保留。
[設施] 欄位表示負責錯誤的系統服務。 Microsoft會視需要配置新的設施代碼。 大部分的 SCODEs 和 HRESULT 值會將設備欄位設定為 FACILITY_ITF,表示介面方法錯誤。
下表說明常見的設備欄位。
設施字段 | 價值 | 描述 |
---|---|---|
設施調度 |
2 |
對於延遲繫結 IDispatch 介面錯誤。 |
FACILITY_ITF |
4 |
對於從介面方法傳回的大部分狀態代碼。 錯誤的實際意義是由 介面所定義。 也就是說,兩個 HRESULT與兩個不同介面傳回的 32 位值完全相同,可能有不同的意義。 |
設施_空值 |
0 |
如需廣泛適用的常見狀態代碼,例如S_OK。 |
FACILITY_RPC |
1 |
適用於從遠端程序呼叫所返回的狀態代碼。 |
設施_儲存 |
3 |
針對從 IStorage 或與結構化存儲相關的 IStream 方法呼叫傳回的狀態代碼。 狀態代碼(低於 16 位)值位於 MS-DOS 錯誤碼範圍中,即小於 256,其意義與對應的 MS-DOS 錯誤相同。 |
FACILITY_WIN32 |
7 |
用來提供處理 Windows API 中函式錯誤碼的方法,做為 HRESULT。 16 位 OLE 中重複系統錯誤碼的錯誤碼也已變更為FACILITY_WIN32。 |
Windows設施 |
8 |
用於 Microsoft 定義介面的附加錯誤代碼。 |
代碼欄位是指派來代表錯誤或警告的唯一數位。
依照慣例,HRESULT 值通常具有下列格式的名稱:功能_嚴重性_原因。
設施 是設施名稱或其他一些辨別標識符;嚴重性 是單一字母 S 或 E,指出函式呼叫成功或產生錯誤 (E):和 Reason 是描述程式代碼意義的標識碼。 例如,狀態代碼STG_E_FILENOTFOUND表示發生記憶體相關錯誤;具體而言,要求的檔案不存在。 來自 FACILITY_NULL 的狀態代碼會省略 設施_ 的前置詞。
錯誤碼是在介面實作的內容中定義。 定義之後,就無法變更成功碼或新增新的成功碼。 不過,可以撰寫新的失敗碼。 Microsoft保留為FACILITY_ITF或新設施中所述介面定義新失敗碼(但未成功代碼)的權利。
相關主題
-
COM 中的 錯誤處理