COM エラー コードの構造
次の図は、 HRESULT (または SCODE) の形式を示しています。数値はビット位置を示しています。
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または新しい施設で説明されているインターフェイスの新しいエラー コード (成功コードではない) を定義する権利を留保します。