_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler

Définit une fonction qui doit être appelée quand la bibliothèque CRT détecte un argument non valide.Sets a function to be called when the CRT detects an invalid argument.

SyntaxeSyntax

_invalid_parameter_handler _set_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);
_invalid_parameter_handler _set_thread_local_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);

ParamètresParameters

pNewpNew
Pointeur de fonction désignant le nouveau gestionnaire de paramètre non valide.The function pointer to the new invalid parameter handler.

Valeur de retourReturn Value

Pointeur désignant le gestionnaire de paramètre non valide avant l’appel.A pointer to the invalid parameter handler before the call.

NotesRemarks

De nombreuses fonctions Runtime C vérifient la validité des arguments qui leur sont transmis.Many C runtime functions check the validity of arguments passed to them. Si un argument non valide est passé, la fonction peut définir le numéro d’erreur errno ou retourner un code d’erreur.If an invalid argument is passed, the function can set the errno error number or return an error code. En pareils cas, le gestionnaire de paramètre non valide est aussi appelé.In such cases, the invalid parameter handler is also called. Le runtime C fournit un gestionnaire de paramètre non valide global par défaut qui met fin au programme et affiche un message d’erreur de runtime.The C runtime supplies a default global invalid parameter handler that terminates the program and displays a runtime error message. Vous pouvez utiliser _set_invalid_parameter_handler pour définir votre propre fonction en tant que gestionnaire de paramètres non valides globaux.You can use the _set_invalid_parameter_handler to set your own function as the global invalid parameter handler. Le Runtime C prend aussi en charge un gestionnaire de paramètre non valide de thread local.The C runtime also supports a thread-local invalid parameter handler. Si un gestionnaire de paramètres de thread local est défini dans un thread à l’aide de _set_thread_local_invalid_parameter_handler, les fonctions du runtime C appelées à partir du thread utilisent ce gestionnaire au lieu du gestionnaire Global.If a thread-local parameter handler is set in a thread by using _set_thread_local_invalid_parameter_handler, the C runtime functions called from the thread use that handler instead of the global handler. Vous ne pouvez définir qu’une seule fonction comme gestionnaire d’argument non valide global à la fois.Only one function can be specified as the global invalid argument handler at a time. De la même manière, vous ne pouvez spécifier qu’une seule fonction comme gestionnaire d’argument non valide de thread local par thread. Par contre, les différents threads peuvent avoir des gestionnaires de thread local distincts.Only one function can be specified as the thread-local invalid argument handler per thread, but different threads can have different thread-local handlers. Vous pouvez ainsi remplacer le gestionnaire utilisé dans une partie de votre code sans affecter le comportement des autres threads.This allows you to change the handler used in one part of your code without affecting the behavior of other threads.

Quand le runtime appelle la fonction de paramètre non valide, cela signifie généralement qu’une erreur irrécupérable s’est produite.When the runtime calls the invalid parameter function, it usually means that a nonrecoverable error occurred. La fonction de gestionnaire de paramètre non valide que vous fournissez doit enregistrer toutes les données qu’elle peut avant d’abandonner.The invalid parameter handler function you supply should save any data it can and then abort. Elle ne doit pas retourner le contrôle à la fonction principale, sauf si vous êtes certain que l’erreur est récupérable.It should not return control to the main function unless you are confident that the error is recoverable.

La fonction de gestionnaire de paramètre non valide doit avoir le prototype suivant :The invalid parameter handler function must have the following prototype:

void _invalid_parameter(
   const wchar_t * expression,
   const wchar_t * function,
   const wchar_t * file,
   unsigned int line,
   uintptr_t pReserved
);

L’argument expression est une représentation sous forme de chaîne étendue de l’expression d’argument qui a déclenché l’erreur.The expression argument is a wide string representation of the argument expression that raised the error. L’argument de fonction est le nom de la fonction CRT qui a reçu l’argument non valide.The function argument is the name of the CRT function that received the invalid argument. L’argument file est le nom du fichier source CRT qui contient la fonction.The file argument is the name of the CRT source file that contains the function. L’argument de ligne est le numéro de ligne dans ce fichier.The line argument is the line number in that file. Le dernier argument est réservé.The last argument is reserved. Les paramètres ont tous la valeur null , sauf si une version de débogage de la bibliothèque CRT est utilisée.The parameters all have the value NULL unless a debug version of the CRT library is used.

Configuration requiseRequirements

RoutineRoutine En-tête requisRequired header
_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler C : <stdlib.h>C: <stdlib.h>

C++ : <cstdlib> ou <stdlib.h>C++: <cstdlib> or <stdlib.h>

Les fonctions _set_invalid_parameter_handler et _set_thread_local_invalid_parameter_handler sont spécifiques à Microsoft.The _set_invalid_parameter_handler and _set_thread_local_invalid_parameter_handler functions are Microsoft specific. Pour plus d'informations sur la compatibilité, voir Compatibilité.For compatibility information, see Compatibility.

ExemplesExample

Dans l’exemple suivant, un gestionnaire d’erreur de paramètre non valide est utilisé pour imprimer la fonction qui a reçu le paramètre non valide, ainsi que le fichier et la ligne des sources CRT.In the following example, an invalid parameter error handler is used to print the function that received the invalid parameter and the file and line in CRT sources. Quand la bibliothèque CRT de débogage est utilisée, les erreurs de paramètre non valide déclenchent aussi une assertion, ce qui est désactivé dans cet exemple via _CrtSetReportMode.When the debug CRT library is used, invalid parameter errors also raise an assertion, which is disabled in this example using _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

Voir aussiSee also

_get_invalid_parameter_handler, _get_thread_local_invalid_parameter_handler_get_invalid_parameter_handler, _get_thread_local_invalid_parameter_handler
Versions à la sécurité améliorée des fonctions CRTSecurity-Enhanced Versions of CRT Functions
errno, _doserrno, _sys_errlist et _sys_nerrerrno, _doserrno, _sys_errlist, and _sys_nerr