COM エラー コードの構造
次の図は、 HRESULT (または SCODE) の形式を示しています。数値はビット位置を示します。
HRESULT または SCODE の上位ビットは、戻り値が成功または失敗を表すかどうかを示します。 0 (SEVERITY_SUCCESS) に設定すると、値は成功を示します。 1 に設定すると、SEVERITY_ERROR、エラーが示されます。
R、C、N、および r ビットは予約されています。
ファシリティ フィールドは、エラーの原因となるシステム サービスを示します。 Microsoft では、必要に応じて新しい施設コードを割り当てます。 ほとんどの SCODEs および HRESULT 値は、インターフェース・メソッド・エラーを示すFACILITY_ITFに機能フィールドを設定します。
共通機能フィールドについては、次の表で説明します。
施設フィールド | 値 | 説明 |
---|---|---|
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 という形式になります。
ファシリティ は、ファシリティ名またはその他の識別識別子です。 重大度 は、関数呼び出しが成功したかエラー (E) を生成したかを示す単一文字の S または E です。and Reason は、コードの意味を記述する識別子です。 たとえば、状態コードSTG_E_FILENOTFOUNDは、ストレージ関連のエラーが発生したことを示します。具体的には、要求されたファイルが存在しません。 facility_ プレフィックスFACILITY_NULL省略した状態コード。
エラー コードは、インターフェイス実装のコンテキスト内で定義されます。 定義すると、成功コードを変更したり、新しい成功コードを追加したりすることはできません。 ただし、新しいエラー コードを記述できます。 Microsoft は、FACILITY_ITFまたは新しい機能で説明されているインターフェイスに対して、新しいエラー コード (成功コードは定義しない) を定義する権利を留保します。