_invalid_parameter, _invalid_parameter_noinfo, _invalid_parameter_noinfo_noreturn, _invoke_watson

Diese Funktionen werden von der C-Laufzeitbibliothek verwendet, um ungültige Parameter zu behandeln, die an CRT-Bibliotheksfunktionen übergeben werden. Ihr Code verwendet diese Funktionen möglicherweise auch zur Unterstützung der Standard- oder anpassbaren Behandlung der ungültigen Parameter.

Syntax

extern "C" void __cdecl
_invalid_parameter(
    wchar_t const* const expression,
    wchar_t const* const function_name,
    wchar_t const* const file_name,
    unsigned int   const line_number,
    uintptr_t      const reserved);

extern "C" void __cdecl
_invalid_parameter_noinfo(void);

extern "C" __declspec(noreturn) void __cdecl
_invalid_parameter_noinfo_noreturn(void);

extern "C" __declspec(noreturn) void __cdecl
_invoke_watson(
    wchar_t const* const expression,
    wchar_t const* const function_name,
    wchar_t const* const file_name,
    unsigned int   const line_number,
    uintptr_t      const reserved);

Parameter

expression
Eine Zeichenfolge, die den ungültigen Quellcodeparameterausdruck darstellt.

function_name
Der Name der Funktion, die den Handler aufgerufen hat.

file_name
Die Quellcodedatei, in der der Handler aufgerufen wurde.

line_number
Die Zeilennummer im Quellcode, in der der Handler aufgerufen wurde.

reserved
Nicht verwendet.

Rückgabewert

Diese Funktionen geben keinen Wert zurück. Die _invalid_parameter_noinfo_noreturn Funktionen kehren _invoke_watson nicht zum Aufrufer zurück, und in einigen Fällen _invalid_parameter kehren sie _invalid_parameter_noinfo möglicherweise nicht zum Aufrufer zurück.

Hinweise

Wenn Funktionen der C-Laufzeitbibliothek ungültige Parameter übergeben, rufen die Bibliotheksfunktionen einen Handler für ungültige Parameter auf, eine Funktion, die möglicherweise vom Programmierer angegeben wird, um mehrere Aufgaben auszuführen. Es kann dem Benutzer möglicherweise das Problem melden, in ein Protokoll schreiben, einen Debugger anhalten, das Programm beenden oder gar nichts machen. Wenn keine Funktion durch den Programmierer angegeben wird, wird ein Standardhandler, _invoke_watson, aufgerufen.

Wenn standardmäßig ein ungültiger Parameter im Debugcode identifiziert wird, rufen Funktionen der CRT-Bibliothek die Funktion _invalid_parameter mithilfe von ausführlichen Parametern auf. Im Nichtdebugcode wird die _invalid_parameter_noinfo-Funktion aufgerufen, welche die _invalid_parameter-Funktion mithilfe von leeren Parametern aufruft. Wenn die Nichtdebug-CRT-Bibliotheksfunktion eine Programmterminierung benötigt, wird die _invalid_parameter_noinfo_noreturn-Funktion aufgerufen, welche die _invalid_parameter-Funktion mithilfe von leeren Parametern aufruft, gefolgt von einem Aufruf der _invoke_watson-Funktion, um die Programmterminierung zu erzwingen.

Die _invalid_parameter-Funktion überprüft, ob ein benutzerdefinierter ungültiger Parametertyphandler festgelegt wurde, und wenn ja, ruft sie ihn auf. Wenn beispielsweise ein benutzerdefinierter threadlokaler Handler durch einen Aufruf set_thread_local_invalid_parameter_handler im aktuellen Thread festgelegt wurde, wird er aufgerufen, und die Funktion wird zurückgegeben. Andernfalls wird die Funktion zurückgegeben, wenn ein benutzerdefinierter, benutzerdefinierter ungültiger Parameterhandler durch einen Aufruf set_invalid_parameter_handlerfestgelegt wurde. Andernfalls wird der standardmäßige Handler _invoke_watson aufgerufen. Das Standardverhalten von _invoke_watson ist das Beenden des Programms. Benutzerdefinierte Handler werden möglicherweise beendet oder zurückgegeben. Es wird empfohlen, dass benutzerdefinierte Handler das Programm beenden, es sei denn, die Wiederherstellung ist sicher.

Wenn der Standardhandler _invoke_watson aufgerufen wird, wird er mithilfe eines Parameters FAST_FAIL_INVALID_ARG aufgerufen, und der Prozess wird beendet, wenn der Prozessor einen __fastfail Vorgang unterstützt. Andernfalls wird eine Fast-Fail-Ausnahme ausgelöst, die durch einen angefügten Debugger abgefangen wird. Wenn der Vorgang fortgesetzt werden darf, wird er durch einen Aufruf der Windows-Funktion TerminateProcess mithilfe eines Ausnahmecodestatus von STATUS_INVALID_CRUNTIME_PARAMETER.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Anforderungen

Funktion Erforderlicher Header
_invalid_parameter, _invalid_parameter_noinfo, _invalid_parameter_noinfo_noreturn, _invoke_watson <corecrt.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Siehe auch

Alphabetische Funktionsreferenz
_get_invalid_parameter_handler, _get_thread_local_invalid_parameter_handler
_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler
Parameterüberprüfung