| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| S | R | C | N | r | Facility | Status Code | |||||||||||||||||||||||||
S - Severity 成否を意味する (0=Success/1=Fail)
R,C,N,r - 予約
| FACILITY_NULL | 0 | S_OK など汎用的な戻り値を返すため使用される |
| FACILITY_PRC | 1 | RPC からのエラー |
| FACILITY_DISPATCH | 2 | IDispatch インターフェイスからのエラー |
| FACILITY_STORAGE | 3 | IStorage, IStream からのエラー |
| FACILITY_ITF | 4 | カスタムインターフェイスが定義 |
| FACILITY_WIN32 | 7 | Win32 API からのエラー |
| FACILITY_WINDOWS | 8 | 標準インターフェイスからのエラー |
| FACILITY_SSPI | 9 | SSPI からのエラー |
| FACILITY_MSMQ | 14 | Microsoft Message Queue Server からのエラー |
| FACILITY_COMPLUS | 17 | COM+ サービスからのエラー |
FACILITY_ITF の時のみユーザーが定義できるそうだ。
ただし Status の 0x0000〜0x01FF は MS で予約してるそうな。
したがって、0x80040200〜0x8004FFFF の範囲でエラーコードを作成できる。
(数値は 16進表記です)
| 8000FFFF | E_UNEXPECTED | Catastrophic failure |
| 80004001 | E_NOTIMPL | Not implemented |
| 8007000E | E_OUTOFMEMORY | Ran out of memory |
| 80070057 | E_INVALIDARG | One or more arguments are invalid |
| 80004002 | E_NOINTERFACE | No such interface supported |
| 80004003 | E_POINTER | Invalid pointer |
| 80070006 | E_HANDLE | Invalid handle |
| 80004004 | E_ABORT | Operation aborted |
| 80004005 | E_FAIL | Unspecified error |
| 80070005 | E_ACCESSDENIED | General access denied error |
| 8000000A | E_PENDING | The data necessary to complete this operation is not yet available. |
Public Const E_UNEXPECTED = &H8000FFFF
Public Const E_NOTIMPL = &H80004001
Public Const E_OUTOFMEMORY = &H8007000E
Public Const E_INVALIDARG = &H80070057
Public Const E_NOINTERFACE = &H80004002
Public Const E_POINTER = &H80004003
Public Const E_HANDLE = &H80070006
Public Const E_ABORT = &H80004004
Public Const E_FAIL = &H80004005
Public Const E_ACCESSDENIED = &H80070005
Public Const E_PENDING = &H8000000A
コンポーネントから受け取ったエラーコードを、
ホストがどのように変換するのかを、一部調べました。
| original | error | WSH | description |
|---|---|---|---|
| 80004001 | E_NOTIMPL | 800001BD | このオブジェクトではサポートされていない操作です。 |
| 8007000E | E_OUTOFMEMORY | 800A0007 | メモリが不足しています。 |
| 80070057 | E_INVALIDARG | 800A0005 | プロシージャの呼び出し、または引数が不正です。 |
| 80004002 | E_NOINTERFACE | 800A01AE | クラスはオートメーションをサポートしていません。 |
| 80070005 | E_ACCESSDENIED | 800A0046 | 書き込みできません。 |
| original | error | VB(10進) | description |
|---|---|---|---|
| 80004001 | E_NOTIMPL | 445 | オブジェクトはこの動作をサポートしていません。 |
| 8007000E | E_OUTOFMEMORY | 7 | メモリが不足しています。 |
| 80070057 | E_INVALIDARG | 5 | プロシージャの呼び出し、または引数が不正です。 |
| 80004002 | E_NOINTERFACE | 430 | クラスはオートメーションまたは予測したインターフェースをサポートしていません。 |
| 80004004 | E_ABORT | 287 | アプリケーション定義またはオブジェクト定義のエラーです。 |
| 80070005 | E_ACCESSDENIED | 70 | 書き込みできません。 |
| 80020001 | DISP_E_UNKNOWNINTERFACE | 438 | オブジェクトは、このプロパティまたはメソッドをサポートしていません。 |
| 80020003 | DISP_E_MEMBERNOTFOUND | 438 | オブジェクトは、このプロパティまたはメソッドをサポートしていません。 |
| 80020006 | DISP_E_UNKNOWNNAME | 438 | オブジェクトは、このプロパティまたはメソッドをサポートしていません。 |
| 80020004 | DISP_E_PARAMNOTFOUND | 448 | 名前付き引数が見つかりません。 |
| 80020005 | DISP_E_TYPEMISMATCH | 13 | 型が一致しません。 |
| 80020007 | DISP_E_NONAMEDARGS | 446 | オブジェクトは名前付き引数をサポートしていません。 |
| 80020008 | DISP_E_BADVARTYPE | 458 | Visual Basic でサポートされていないオートメーションが変数で使用されています。 |
| 8002000A | DISP_E_OVERFLOW | 6 | オーバーフローしました。 |
| 8002000B | DISP_E_BADINDEX | 9 | インデックスが有効範囲にありません。 |
| 8002000C | DISP_E_UNKNOWNLCID | 447 | オブジェクトは現在の国別情報の設定をサポートしていません。 |
| 8002000D | DISP_E_ARRAYISLOCKED | 10 | この配列は固定されているか、または一時的にロックされています。 |
| 8002000E | DISP_E_BADPARAMCOUNT | 450 | 引数の数が一致していません。または不正なプロパティを指定しています。 |
| 8002000F | DISP_E_PARAMNOTOPTIONAL | 449 | 引数は省略できません。 |
| 80020011 | DISP_E_NOTACOLLECTION | 451 | Property Let プロシージャが定義されておらず、Property Get プロシージャからオブジェクトが返されませんでした。 |
| 80020012 | DISP_E_DIVBYZERO | 11 | 0 で除算しました。 |
| 80028017 | TYPE_E_FIELDNOTFOUND | 461 | メソッドまたはデータ メンバが見つかりません。 |
| 8002802F | TYPE_E_DLLFUNCTIONNOTFOUND | 453 | 関数は指定された DLL には定義されていません。 |
| 80028CA0 | TYPE_E_TYPEMISMATCH | 13 | 型が一致しません。 |
| 80028CA1 | TYPE_E_OUTOFBOUNDS | 9 | インデックスが有効範囲にありません。 |
| 80028CA2 | TYPE_E_IOERROR | 57 | デバイス I/O エラーです。 |
| 80028CA3 | TYPE_E_CANTCREATETMPFILE | 322 | 必要な一時ファイルを作成できません。 |
| 80029C4A | TYPE_E_CANTLOADLIBRARY | 48 | DLL 読み込み時のエラーです。 |
| 80030002 | STG_E_FILENOTFOUND | 432 | オートメーションの操作中にファイル名またはクラス名を見つけられませんでした。 |
| 80030003 | STG_E_PATHNOTFOUND | 76 | パスが見つかりません。 |
| 80030004 | STG_E_TOOMANYOPENFILES | 67 | ファイルが多すぎます。 |
| 80030005 | STG_E_ACCESSDENIED | 70 | 書き込みできません。 |
| 80030006 | STG_E_INVALIDHANDLE | 7 | メモリが不足しています。 |
| 80030012 | STG_E_NOMOREFILES | 67 | ファイルが多すぎます。 |
| 80030013 | STG_E_DISKISWRITEPROTECTED | 70 | 書き込みできません。 |
| 80030020 | STG_E_SHAREVIOLATION | 75 | パス名が無効です。 |
| 80030021 | STG_E_LOCKVIOLATION | 70 | 書き込みできません。 |
| 80030050 | STG_E_FILEALREADYEXISTS | 58 | 既に同名のファイルが存在しています。 |
| 80030070 | STG_E_MEDIUMFULL | 61 | ディスクの空き容量が不足しています。 |
| 800300FC | STG_E_INVALIDNAME | 53 | ファイルが見つかりません。 |
| 80030100 | STG_E_INUSE | 70 | 書き込みできません。 |
| 80030101 | STG_E_NOTCURRENT | 70 | 書き込みできません。 |
| 80030103 | STG_E_CANTSAVE | 57 | デバイス I/O エラーです。 |
| 800401F5 | CO_E_APPNOTFOUND | 429 | ActiveX コンポーネントはオブジェクトを作成できません。 |
| 800401FE | CO_E_APPDIDNTREG | 429 | ActiveX コンポーネントはオブジェクトを作成できません。 |
| 80080005 | CO_E_SERVER_EXEC_FAILURE | 429 | ActiveX コンポーネントはオブジェクトを作成できません。 |
| 80040112 | CLASS_E_NOTLICENSED | 429 | ActiveX コンポーネントはオブジェクトを作成できません。 |
| 80040154 | REGDB_E_CLASSNOTREG | 429 | ActiveX コンポーネントはオブジェクトを作成できません。 |
| 800401E3 | MK_E_UNAVAILABLE | 429 | ActiveX コンポーネントはオブジェクトを作成できません。 |
| 800401E6 | MK_E_INVALIDEXTENSION | 432 | オートメーションの操作中にファイル名またはクラス名を見つけられませんでした。 |
| 800401EA | MK_E_CANTOPENFILE | 432 | オートメーションの操作中にファイル名またはクラス名を見つけられませんでした。 |