GetExceptionCode マクロ

発生する例外の種類を識別するコードを取得します。 関数は、例外ハンドラーのフィルター式または例外ハンドラー ブロック内からのみ呼び出すことができます。

注意

Microsoft C/C++ 最適化コンパイラは、この関数をキーワード (keyword)として解釈し、適切な例外処理構文の外部で使用するとコンパイラ エラーが生成されます。

 

構文

DWORD GetExceptionCode(void);

パラメーター

このマクロにはパラメーターがありません。

戻り値

戻り値は、例外の種類を識別します。 次の表は、一般的なプログラミング エラーが原因で発生する可能性がある例外コードを示しています。 これらの値は、WinBase.h と WinNT.h で定義されます。

リターン コード 説明
EXCEPTION_ACCESS_VIOLATION
スレッドは、アクセス権のない仮想アドレスの読み取りまたは書き込みを試みます。
この値は、STATUS_ACCESS_VIOLATIONとして定義されます。
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
スレッドは範囲外の配列要素へのアクセスを試み、基になるハードウェアは境界チェックをサポートします。
この値は、STATUS_ARRAY_BOUNDS_EXCEEDEDとして定義されます。
EXCEPTION_BREAKPOINT
ブレークポイントが見つかりました。
この値は、STATUS_BREAKPOINTとして定義されます。
EXCEPTION_DATATYPE_MISALIGNMENT
スレッドは、アラインメントを提供しないハードウェア上で不整合なデータの読み取りまたは書き込みを試みます。 たとえば、16 ビット値は 2 バイト境界に配置する必要があり、32 ビット値は 4 バイト境界に配置する必要があります。
この値は、STATUS_DATATYPE_MISALIGNMENTとして定義されます。
EXCEPTION_FLT_DENORMAL_OPERAND
浮動小数点演算のオペランドの 1 つは非正規です。 非正規値は、小さすぎて標準の浮動小数点値として表す値です。
この値は、STATUS_FLOAT_DENORMAL_OPERANDとして定義されます。
EXCEPTION_FLT_DIVIDE_BY_ZERO
スレッドは、浮動小数点値を 0 (ゼロ) の浮動小数点除数で除算しようとします。
この値は、STATUS_FLOAT_DIVIDE_BY_ZEROとして定義されます。
EXCEPTION_FLT_INEXACT_RESULT
浮動小数点演算の結果を 10 進数で正確に表すことはできません。
この値は、STATUS_FLOAT_INEXACT_RESULTとして定義されます。
EXCEPTION_FLT_INVALID_OPERATION
このリストに含まれていない浮動小数点例外。
この値は、STATUS_FLOAT_INVALID_OPERATIONとして定義されます。
EXCEPTION_FLT_OVERFLOW
浮動小数点演算の指数が、対応する型で許容される大きさを超えています。
この値は、STATUS_FLOAT_OVERFLOWとして定義されます。
EXCEPTION_FLT_STACK_CHECK
浮動小数点演算のため、スタックがオーバーフローまたはアンダーフローされました。
この値は、STATUS_FLOAT_STACK_CHECKとして定義されます。
EXCEPTION_FLT_UNDERFLOW
浮動小数点演算の指数は、対応する型で許容される大きさよりも小さくなります。
この値は、STATUS_FLOAT_UNDERFLOWとして定義されます。
EXCEPTION_GUARD_PAGE
PAGE_GUARD 修飾子を使用して割り当てられたメモリにアクセスしたスレッド。
この値は、STATUS_GUARD_PAGE_VIOLATIONとして定義されます。
EXCEPTION_ILLEGAL_INSTRUCTION
スレッドが無効な命令を実行しようとします。
この値は、STATUS_ILLEGAL_INSTRUCTIONとして定義されます。
EXCEPTION_IN_PAGE_ERROR
スレッドが存在しないページへのアクセスを試みると、システムはページを読み込むことができません。 たとえば、この例外は、ネットワーク経由でプログラムを実行しているときにネットワーク接続が失われた場合に発生する可能性があります。
この値は、STATUS_IN_PAGE_ERRORとして定義されます。
EXCEPTION_INT_DIVIDE_BY_ZERO
スレッドは、整数値を 0 (ゼロ) の整数除数で除算しようとします。
この値は、STATUS_INTEGER_DIVIDE_BY_ZEROとして定義されます。
EXCEPTION_INT_OVERFLOW
整数演算の結果、宛先レジスタが保持するには大きすぎる値が作成されます。 場合によっては、結果の最も重要なビットが実行されます。 一部の操作では、キャリー フラグが設定されません。
この値は、STATUS_INTEGER_OVERFLOWとして定義されます。
EXCEPTION_INVALID_DISPOSITION
例外ハンドラーは、例外ディスパッチャーに無効な処理を返します。 C などの高度な言語を使用するプログラマは、この例外を発生させるべきではありません。
この値は、STATUS_INVALID_DISPOSITIONとして定義されます。
EXCEPTION_INVALID_HANDLE
スレッドは、無効なカーネル オブジェクトへのハンドルを使用しました (おそらく、それが閉じられていたためです)。
この値は、STATUS_INVALID_HANDLEとして定義されます。
EXCEPTION_NONCONTINUABLE_EXCEPTION
スレッドは、継続不可能な例外が発生した後も実行の継続を試みます。
この値は、STATUS_NONCONTINUABLE_EXCEPTIONとして定義されます。
EXCEPTION_PRIV_INSTRUCTION
スレッドは、現在のコンピューター モードでは許可されていない操作を使用して命令を実行しようとします。
この値は、STATUS_PRIVILEGED_INSTRUCTIONとして定義されます。
EXCEPTION_SINGLE_STEP
トレース トラップまたはその他の 1 つの命令メカニズムは、1 つの命令が実行されたことを通知します。
この値は、STATUS_SINGLE_STEPとして定義されます。
EXCEPTION_STACK_OVERFLOW
スレッドはスタックを使い果たします。
この値は、STATUS_STACK_OVERFLOWとして定義されます。
STATUS_UNWIND_CONSOLIDATE
フレーム統合が実行されました。

 

解説

GetExceptionCode 関数は、例外ハンドラーのフィルター式または例外ハンドラー ブロック内からのみ呼び出すことができます。 フィルター式は、 __try ブロックの実行中に例外が発生し、 __except ブロックが実行されるかどうかを判断する場合に評価されます。

フィルター式は、フィルター関数を呼び出すことができます。 フィルター関数は GetExceptionCode を呼び出すことができません。 ただし、 GetExceptionCode の戻り値は、パラメーターとしてフィルター関数に渡すことができます。 GetExceptionInformation 関数の戻り値は、パラメーターとしてフィルター関数に渡すこともできます。 GetExceptionInformation は、例外コード情報を含む構造体へのポインターを返します。

入れ子になったハンドラーが存在する場合、各フィルター式は、EXCEPTION_EXECUTE_HANDLERまたはEXCEPTION_CONTINUE_EXECUTIONとして評価されるまで評価されます。 各フィルター式は 、GetExceptionCode を 呼び出して例外コードを取得できます。

返される例外コードは、ハードウェア例外によって生成されたコード、またはソフトウェアによって生成された例外の RaiseException 関数で指定されたコードです。

ブレークポイント例外を処理するときは、コンテキスト レコード内の命令ポインターをインクリメントして、この例外から続行することが重要です。

例については、「 例外ハンドラーの使用」を参照してください。

必要条件

要件
サポートされている最小のクライアント
Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows Server 2003 [デスクトップ アプリのみ]

こちらもご覧ください

GetExceptionInformation

RaiseException

構造化例外処理関数

構造化例外処理の概要