共用方式為


COM 錯誤碼的結構

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

顯示「H RESULT」或「S CODE」的格式,其中數字表示位元位置。

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 中的 錯誤處理

Windows 通訊協定:HRESULT