set_unexpected (CRT)
更新 : 2007 年 11 月
unexpected によって呼び出される独自の終了関数を設定します。
unexpected_function set_unexpected(
unexpected_function unexpFunction
);
パラメータ
- unexpFunction
unexpected 関数と置き換える独自の関数へのポインタ。
戻り値
_set_unexpected 関数の前回の呼び出しで登録された終了関数へのポインタを返します。これにより、以前の関数を後で復元できます。関数が登録されていない場合は、その戻り値 (NULL でも可) を使って既定の動作を復元できます。
解説
set_unexpected 関数は、unexpFunction を unexpected によって呼び出される関数として設定します。unexpected は、現在の C++ 例外処理の実装では使用されていません。unexpected_function 型は、void 型の値を返す独自の unexpected 関数 unexpFunction へのポインタとして EH.H で定義されています。カスタムの unexpFunction 関数は、呼び出し側に処理を戻しません。
typedef void ( *unexpected_function )( );
既定では、unexpected 関数は terminate 関数を呼び出します。この既定の動作を変更するには、独自の終了関数を作成し、その関数名を引数として set_unexpected 関数を呼び出します。unexpected は、直前の set_unexpected の呼び出しで引数として指定された関数を呼び出します。
set_terminate を呼び出して設定する独自の終了関数とは異なり、unexpFunction 内からは例外をスローできます。
マルチスレッド環境では、unexpected 関数はスレッドごとに個別に管理されます。新しいスレッドでは、それぞれ独自の unexpected 関数を設定する必要があります。つまり、予測不能な事態の処理は、スレッドごとに行われます。
現在の Microsoft の C++ 例外処理では、unexpected は既定で terminate を呼び出すため、例外処理のランタイム ライブラリからは呼び出されません。terminate ではなく unexpected を呼び出しても、特に利点はありません。
動的にリンクされるすべての DLL や EXE に対して、set_unexpected ハンドラは 1 つだけです。そのため、set_unexpected を呼び出しても、ハンドラが別のハンドラで置き換えられたり、別の DLL または EXE で設定されたハンドラを置き換えたりする場合があります。
必要条件
ルーチン |
必須ヘッダー |
---|---|
set_unexpected |
<eh.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
.NET Framework の相当するアイテム
適用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。