set_unexpected (CRT)
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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。