GetExceptionCode マクロ
発生する例外の種類を識別するコードを取得します。 関数は、例外ハンドラーのフィルター式または例外ハンドラー ブロック内からのみ呼び出すことができます。
注意
Microsoft C/C++ 最適化コンパイラは、この関数をキーワード (keyword)として解釈し、適切な例外処理構文の外部で使用するとコンパイラ エラーが生成されます。
構文
DWORD GetExceptionCode(void);
パラメーター
このマクロにはパラメーターがありません。
戻り値
戻り値は、例外の種類を識別します。 次の表は、一般的なプログラミング エラーが原因で発生する可能性がある例外コードを示しています。 これらの値は、WinBase.h と WinNT.h で定義されます。
リターン コード | 説明 |
---|---|
|
スレッドは、アクセス権のない仮想アドレスの読み取りまたは書き込みを試みます。 この値は、STATUS_ACCESS_VIOLATIONとして定義されます。 |
|
スレッドは範囲外の配列要素へのアクセスを試み、基になるハードウェアは境界チェックをサポートします。 この値は、STATUS_ARRAY_BOUNDS_EXCEEDEDとして定義されます。 |
|
ブレークポイントが見つかりました。 この値は、STATUS_BREAKPOINTとして定義されます。 |
|
スレッドは、アラインメントを提供しないハードウェア上で不整合なデータの読み取りまたは書き込みを試みます。 たとえば、16 ビット値は 2 バイト境界に配置する必要があり、32 ビット値は 4 バイト境界に配置する必要があります。 この値は、STATUS_DATATYPE_MISALIGNMENTとして定義されます。 |
|
浮動小数点演算のオペランドの 1 つは非正規です。 非正規値は、小さすぎて標準の浮動小数点値として表す値です。 この値は、STATUS_FLOAT_DENORMAL_OPERANDとして定義されます。 |
|
スレッドは、浮動小数点値を 0 (ゼロ) の浮動小数点除数で除算しようとします。 この値は、STATUS_FLOAT_DIVIDE_BY_ZEROとして定義されます。 |
|
浮動小数点演算の結果を 10 進数で正確に表すことはできません。 この値は、STATUS_FLOAT_INEXACT_RESULTとして定義されます。 |
|
このリストに含まれていない浮動小数点例外。 この値は、STATUS_FLOAT_INVALID_OPERATIONとして定義されます。 |
|
浮動小数点演算の指数が、対応する型で許容される大きさを超えています。 この値は、STATUS_FLOAT_OVERFLOWとして定義されます。 |
|
浮動小数点演算のため、スタックがオーバーフローまたはアンダーフローされました。 この値は、STATUS_FLOAT_STACK_CHECKとして定義されます。 |
|
浮動小数点演算の指数は、対応する型で許容される大きさよりも小さくなります。 この値は、STATUS_FLOAT_UNDERFLOWとして定義されます。 |
|
PAGE_GUARD 修飾子を使用して割り当てられたメモリにアクセスしたスレッド。 この値は、STATUS_GUARD_PAGE_VIOLATIONとして定義されます。 |
|
スレッドが無効な命令を実行しようとします。 この値は、STATUS_ILLEGAL_INSTRUCTIONとして定義されます。 |
|
スレッドが存在しないページへのアクセスを試みると、システムはページを読み込むことができません。 たとえば、この例外は、ネットワーク経由でプログラムを実行しているときにネットワーク接続が失われた場合に発生する可能性があります。 この値は、STATUS_IN_PAGE_ERRORとして定義されます。 |
|
スレッドは、整数値を 0 (ゼロ) の整数除数で除算しようとします。 この値は、STATUS_INTEGER_DIVIDE_BY_ZEROとして定義されます。 |
|
整数演算の結果、宛先レジスタが保持するには大きすぎる値が作成されます。 場合によっては、結果の最も重要なビットが実行されます。 一部の操作では、キャリー フラグが設定されません。 この値は、STATUS_INTEGER_OVERFLOWとして定義されます。 |
|
例外ハンドラーは、例外ディスパッチャーに無効な処理を返します。 C などの高度な言語を使用するプログラマは、この例外を発生させるべきではありません。 この値は、STATUS_INVALID_DISPOSITIONとして定義されます。 |
|
スレッドは、無効なカーネル オブジェクトへのハンドルを使用しました (おそらく、それが閉じられていたためです)。 この値は、STATUS_INVALID_HANDLEとして定義されます。 |
|
スレッドは、継続不可能な例外が発生した後も実行の継続を試みます。 この値は、STATUS_NONCONTINUABLE_EXCEPTIONとして定義されます。 |
|
スレッドは、現在のコンピューター モードでは許可されていない操作を使用して命令を実行しようとします。 この値は、STATUS_PRIVILEGED_INSTRUCTIONとして定義されます。 |
|
トレース トラップまたはその他の 1 つの命令メカニズムは、1 つの命令が実行されたことを通知します。 この値は、STATUS_SINGLE_STEPとして定義されます。 |
|
スレッドはスタックを使い果たします。 この値は、STATUS_STACK_OVERFLOWとして定義されます。 |
|
フレーム統合が実行されました。 |
解説
GetExceptionCode 関数は、例外ハンドラーのフィルター式または例外ハンドラー ブロック内からのみ呼び出すことができます。 フィルター式は、 __try ブロックの実行中に例外が発生し、 __except ブロックが実行されるかどうかを判断する場合に評価されます。
フィルター式は、フィルター関数を呼び出すことができます。 フィルター関数は GetExceptionCode を呼び出すことができません。 ただし、 GetExceptionCode の戻り値は、パラメーターとしてフィルター関数に渡すことができます。 GetExceptionInformation 関数の戻り値は、パラメーターとしてフィルター関数に渡すこともできます。 GetExceptionInformation は、例外コード情報を含む構造体へのポインターを返します。
入れ子になったハンドラーが存在する場合、各フィルター式は、EXCEPTION_EXECUTE_HANDLERまたはEXCEPTION_CONTINUE_EXECUTIONとして評価されるまで評価されます。 各フィルター式は 、GetExceptionCode を 呼び出して例外コードを取得できます。
返される例外コードは、ハードウェア例外によって生成されたコード、またはソフトウェアによって生成された例外の RaiseException 関数で指定されたコードです。
ブレークポイント例外を処理するときは、コンテキスト レコード内の命令ポインターをインクリメントして、この例外から続行することが重要です。
例
例については、「 例外ハンドラーの使用」を参照してください。
必要条件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows XP [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows Server 2003 [デスクトップ アプリのみ] |
こちらもご覧ください