次の方法で共有


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

参照

参照

例外処理ルーチン

abort

_get_unexpected

set_terminate (CRT)

terminate (CRT)

unexpected (CRT)