COM 錯誤碼的結構

下圖顯示 HRESULT 格式(或 SCODE):數位表示位位置:

Shows the format of an 'H RESULT' or 'S CODE' with numbers indicating bit positions.

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或新設施中所述介面的新失敗碼(但未成功代碼)的權利。

COM 中的錯誤處理

Windows 通訊協定:HRESULT