Win32 の構造化例外(C++)
C++Builder の例外処理 への移動
Win32 では、C++ での標準例外処理と似た C ベースの構造化例外処理(SEH)をサポートしています。ただし、両者には重要な違いがいくつかあり、例外に対応している C++ コードと混在させる場合には慎重な取り扱いが必要になります。
C++Builder アプリケーションで構造化例外処理を使用する場合には、以下の点に留意してください。
- C の構造化例外は C++ プログラムで使用できます。
- C++ 例外は C プログラムでは使用できません。C++ 例外では、そのハンドラを catch キーワードで指定する必要がありますが、C プログラムでは catch を使用できないからです。
- RaiseException 関数の呼び出しで生成された例外は、
try
/__except
ブロック(C++ の場合)または__try
/__except
ブロック(C の場合)で処理されます (try
/__finally
ブロックまたは__try
/__finally
ブロックもそれぞれ使用できます)。「構造化例外の構文(C++)」を参照してください。RaiseException が呼び出された場合、try
/catch
ブロックのハンドラはすべて無視されます。 - 例外がアプリケーションで処理されない場合は、terminate が呼び出されるのではなく、オペレーティング システムに例外が渡されます(一般に、その結果、最終的にはプロセスが終了します)。
- 例外ハンドラは、自ら要求しない限り、例外オブジェクトのコピーを受け取りません。
C または C++ プログラムでは、以下の C 例外ヘルパ関数を使用できます。
C++Builder では、UnhandledExceptionFilter 関数の使用は __try
/__except
ブロックや try
/__except
ブロックの例外フィルタに限定されるわけではありません。ただし、この関数が __try
/__except
ブロックや try
/__except
ブロックの外部で呼び出された場合、プログラムの動作は不定です。
トピック
- 構造化例外の構文(C++)
- 構造化例外の処理(C++)
- 構造化例外のフィルタ処理(C++)
- 標準例外と構造化例外の混在(C++)
- 構造化例外の定義(C++)
- 構造化例外の発生(C++)
- SEH 終了処理ブロック(C++)
- C++Builder の例外処理コンパイラ オプション