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