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に機能フィールドを設定します。

共通のファシリティ フィールドについては、次の表で説明します。

ファシリティ フィールド Value 説明
FACILITY_DISPATCH
2
遅延バインディング IDispatch インターフェイス エラーの場合。
FACILITY_ITF
4
インターフェイス メソッドから返されるほとんどの状態コード。 エラーの実際の意味は、インターフェイスによって定義されます。 つまり、2 つの 異なるインターフェイスから返されるまったく同じ 32 ビット値を持つ 2 つの HRESULT は、異なる意味を持つ可能性があります。
FACILITY_NULL
0
S_OKなど、広く適用可能な一般的な状態コードの場合。
FACILITY_RPC
1
リモート プロシージャ 呼び出しから返される状態コードの場合。
FACILITY_STORAGE
3
構造化ストレージに関連する IStorage または 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 という形式になります。

Facility は、施設名またはその他の識別識別子です。 Severity は、関数呼び出しが成功したかエラー (E) を生成したかを示す 1 文字の S または E で、 Reason はコードの意味を記述する識別子です。 たとえば、状態コードSTG_E_FILENOTFOUNDは、ストレージ関連のエラーが発生したことを示します。具体的には、要求されたファイルが存在しません。 FACILITY_NULLの状態コードは、 Facility_ プレフィックスを省略します。

エラー コードは、インターフェイス実装のコンテキスト内で定義されます。 定義すると、成功コードを変更したり、新しい成功コードを追加したりすることはできません。 ただし、新しいエラー コードを記述できます。 Microsoft は、FACILITY_ITFまたは新しい施設で説明されているインターフェイスの新しいエラー コード (成功コードではない) を定義する権利を留保します。

COM でのエラー処理

Windows プロトコル: HRESULT