エラーの処理方法
インターフェイス メソッドは仮想であるため、呼び出し元は 1 回の呼び出しから返される可能性のある値の完全なセットを知ることはできません。 メソッドの 1 つの実装では 5 つの値が返される場合があります。他の人は 8 を返すかもしれません。
ドキュメントには、各メソッドで返される可能性のある一般的な値がリストされています。これらの値には特別な意味があるため、コード内で確認して処理する必要があります。 他の値が返される場合もありますが、それらは意味がないため、それらを処理するための特別なコードを作成する必要はありません。 0 か 0 以外かを単純にチェックするだけで十分です。
HRESULT の値
COM 関数とメソッドの戻り値は HRESULT です。 一部の HRESULT の値は、システム エラー コードとの重複をすべて排除するように COM で変更されました。 システム エラー コードが重複するものは FACILITY_WIN32 に変更され、重複するものは FACILITY_NULL のままとなります。 一般的な HRESULT 値とその値を次の表に示します。
HRESULT | Value | 説明 |
---|---|---|
E_ABORT |
0x80004004 |
不特定のエラーのため、操作は中止されました。 |
E_ACCESSDENIED |
0x80070005 |
一般的なアクセス拒否エラー。 |
E_FAIL |
0x80004005 |
指定されていないエラーが発生しました。 |
E_HANDLE |
0x80070006 |
無効なハンドルが使用されました。 |
E_INVALIDARG |
0x80070057 |
1 つ以上の引数が無効です。 |
E_NOINTERFACE |
0x80004002 |
QueryInterface メソッドは要求されたインターフェイスを認識しませんでした。 インターフェイスはサポートされません。 |
E_NOTIMPL |
0x80004001 |
このメソッドは実装されていません。 |
E_OUTOFMEMORY |
0x8007000E |
メソッドが必要なメモリの割り当てに失敗しました。 |
E_PENDING |
0x8000000A |
操作を完了するために必要なデータはまだ入手できません。 |
E_POINTER |
0x80004003 |
無効なポインターが使用されました。 |
E_UNEXPECTED |
0x8000FFFF |
致命的な障害が発生しました。 |
S_FALSE |
0x00000001 |
メソッドは成功し、ブール値 FALSE を返しました。 |
S_OK |
0x00000000 |
メソッドが成功しました。 ブール値の戻り値が必要な場合、戻り値は TRUE です。 |
ネットワーク エラー
エラー コードの最初の 4 桁が 8007 の場合、これはシステムまたはネットワーク エラーを示します。 net コマンドを使用して、これらの種類のエラーをデコードできます。 エラーをデコードするには、まず 16 進数のエラー コードの最後の 4 桁を 10 進数に変換します。 次に、コマンド プロンプトで次のように入力します。ここで、10 進コードはデコードする戻り値に置き換えられます。
net helpmsg <decimal_code>
net コマンドはエラーの説明を返します。 たとえば、COM がエラー 8007054B を返した場合、054B を 10 進数 (1355) に変換します。 その後、次のように入力します。
net helpmsg 1355
net コマンドは、「指定されたドメインは存在しませんでした」というエラーの説明を返します。