Win32 の構造化例外(C++)

提供: RAD Studio
移動先: 案内検索

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 ブロックの外部で呼び出された場合、プログラムの動作は不定です。

トピック

関連項目