_set_invalid_parameter_handler
, _set_thread_local_invalid_parameter_handler
Nastaví funkci, která se má volat, když CRT zjistí neplatný argument.
Syntaxe
_invalid_parameter_handler _set_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
_invalid_parameter_handler _set_thread_local_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
Parametry
pNew
Ukazatel funkce na novou neplatnou obslužnou rutinu parametru.
Vrácená hodnota
Ukazatel na neplatnou obslužnou rutinu parametru před voláním.
Poznámky
Mnoho funkcí modulu runtime jazyka C kontroluje platnost argumentů předaných jim. Pokud je předán neplatný argument, může funkce nastavit errno
číslo chyby nebo vrátit kód chyby. V takových případech se volá také neplatná obslužná rutina parametru. Modul runtime jazyka C poskytuje výchozí globální neplatnou obslužnou rutinu parametru, která program ukončí a zobrazí chybovou zprávu modulu runtime. Můžete použít _set_invalid_parameter_handler
k nastavení vlastní funkce jako globální neplatnou obslužnou rutinu parametru. Modul runtime jazyka C také podporuje obslužnou rutinu parametru typu thread-local, která je neplatná. Pokud je obslužná rutina parametru thread-local nastavena ve vlákně pomocí _set_thread_local_invalid_parameter_handler
, funkce modulu runtime jazyka C volané z vlákna používají tuto obslužnou rutinu místo globální obslužné rutiny. Jako globální neplatnou obslužnou rutinu argumentu lze současně zadat pouze jednu funkci. Jako obslužnou rutinu argumentu typu thread-local je možné zadat pouze jednu funkci, ale různá vlákna můžou mít různé obslužné rutiny místního vlákna. Místní obslužné rutiny vlákna umožňují změnit obslužnou rutinu použitou v jedné části kódu, aniž by to ovlivnilo chování jiných vláken.
Když modul runtime volá neplatnou funkci parametru, obvykle to znamená, že došlo k nepřesné chybě. Neplatná funkce obslužné rutiny parametru, kterou zadáte, by měla uložit všechna data, která může a pak přerušit. Pokud si nejste jistí, že se chyba dá obnovit, nemělo by se vrátit zpět do hlavní funkce.
Neplatná funkce obslužné rutiny parametru musí mít následující prototyp:
void _invalid_parameter(
const wchar_t * expression,
const wchar_t * function,
const wchar_t * file,
unsigned int line,
uintptr_t pReserved
);
Argument expression
je široká řetězcová reprezentace výrazu argumentu, který vyvolal chybu. Argument function
je název funkce CRT, která obdržela neplatný argument. Argumentem file
je název zdrojového souboru CRT, který obsahuje funkci. Argumentem line
je číslo řádku v daném souboru. Poslední argument je vyhrazen. Všechny parametry mají hodnotu NULL
, pokud se nepoužije ladicí verze knihovny CRT.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
_set_invalid_parameter_handler , _set_thread_local_invalid_parameter_handler |
C: <stdlib.h> C++: <cstdlib> nebo <stdlib.h> |
Funkce _set_invalid_parameter_handler
a _set_thread_local_invalid_parameter_handler
funkce jsou specifické pro Microsoft. Informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
V následujícím příkladu se k tisku funkce, která přijala neplatný parametr, a soubor a řádek ve zdrojích CRT používá neplatnou obslužnou rutinu chyby parametru. Při použití knihovny CRT ladění vyvolá neplatné chyby parametrů také kontrolní výraz, který je v tomto příkladu zakázán pomocí _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);
}
Invalid parameter detected in function common_vfprintf. File: minkernel\crts\ucrt\src\appcrt\stdio\output.cpp Line: 32
Expression: format != nullptr
Viz také
_get_invalid_parameter_handler
, _get_thread_local_invalid_parameter_handler
Vylepšené verze funkcí CRT s rozšířeným zabezpečením
errno
, _doserrno
, _sys_errlist
a _sys_nerr