_set_invalid_parameter_handler
CRT が無効な引数を検出した場合に呼び出す関数を設定します。
_invalid_parameter_handler _set_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
パラメーター
- [入力] pNew
新しい無効なパラメーター ハンドラーへの関数ポインター。
戻り値
呼び出しの前の無効なパラメーター ハンドラーへのポインター。
解説
多くの C ランタイム関数は、渡された引数の有効性をチェックします。 無効な引数が渡されると、関数は errno にエラー番号を設定するか、エラー コードを返します。 その場合、無効なパラメーター ハンドラーも呼び出されます。 この関数を使用すると、このハンドラーを別の関数に設定できます。 無効な引数のハンドラーに一度に指定できる関数は 1 つだけです。
フレームワークが無効なパラメーター関数を呼び出した場合、通常は回復不可能なエラーが発生したことを示します。 無効なパラメーター関数では、できるだけデータを保存してから、処理を中止する必要があります。 エラーが回復可能であることが確実でない限り、main 関数に制御を戻さないでください。
無効なパラメーター ハンドラーの関数には、次のプロトタイプが必要です。
void _invalid_parameter(
const wchar_t * expression,
const wchar_t * function,
const wchar_t * file,
unsigned int line,
uintptr_t pReserved
);
最初の引数は引数式です。 2 番目の引数は、無効な引数を受け取った CRT 関数の名前です。 3 番目の引数は、CRT ソースのファイル名です。 4 番目の引数は、そのファイルの行数です。 最後の引数は予約されています。 すべてのパラメーターの値は、CRT ライブラリのデバッグ バージョンを使用する場合を除いて、NULL になっています。
必要条件
ルーチン |
必須ヘッダー |
---|---|
_set_invalid_parameter_handler |
<stdlib.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
無効なパラメーター エラーのハンドラーを使用して、無効なパラメーターを受け取った関数、CRT ソースのファイル名と 行番号を出力する例を次に示します。 CRT デバッグ ライブラリを使用する場合、無効なパラメーター エラーによってアサーションもスローされますが、この例では _CrtSetReportMode を使用して無効にしています。
// crt_set_invalid_parameter_handler.c
// compile with: /Zi /MTd
#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h> // For _CrtSetReportMode
void myInvalidParameterHandler(const wchar_t* expression,
const wchar_t* function,
const wchar_t* file,
unsigned int line,
uintptr_t pReserved)
{
wprintf(L"Invalid parameter detected in function %s."
L" File: %s Line: %d\n", function, file, line);
wprintf(L"Expression: %s\n", expression);
abort();
}
int main( )
{
char* formatString;
_invalid_parameter_handler oldHandler, newHandler;
newHandler = myInvalidParameterHandler;
oldHandler = _set_invalid_parameter_handler(newHandler);
// Disable the message box for assertions.
_CrtSetReportMode(_CRT_ASSERT, 0);
// Call printf_s with invalid parameters.
formatString = NULL;
printf(formatString);
}