_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.
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
);
Paramètres
pNew
Pointeur de fonction désignant le nouveau gestionnaire de paramètre non valide.
Valeur retournée
Pointeur désignant le gestionnaire de paramètre non valide avant l’appel.
Notes
De nombreuses fonctions Runtime C vérifient la validité des arguments qui leur sont transmis. Si un argument non valide est transmis, la fonction peut définir le numéro d’erreur errno
ou retourner un code d’erreur. En pareils cas, le gestionnaire de paramètre non valide est aussi appelé. 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. Vous pouvez utiliser _set_invalid_parameter_handler
pour définir votre propre fonction en tant que gestionnaire de paramètre non valide global. Le Runtime C prend aussi en charge un gestionnaire de paramètre non valide de thread local. Si un gestionnaire de paramètre 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 à la place du gestionnaire global. Vous ne pouvez définir qu’une seule fonction comme gestionnaire d’argument non valide global à la fois. 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. Les gestionnaires locaux de thread vous permettent de modifier le gestionnaire utilisé dans une partie de votre code sans affecter le comportement d’autres 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. La fonction de gestionnaire de paramètre non valide que vous fournissez doit enregistrer toutes les données qu’elle peut avant d’abandonner. Il ne doit pas retourner le contrôle à la fonction principale, sauf si vous êtes certain que l’erreur est récupérable.
La fonction de gestionnaire de paramètre non valide doit avoir le prototype suivant :
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 de chaîne large de l’expression d’argument qui a généré l’erreur. L’argument function
correspond au nom de la fonction CRT qui a reçu l’argument non valide. L’argument file
correspond au nom du fichier source CRT qui contient la fonction. L’argument line
correspond au numéro de ligne dans ce fichier. Le dernier argument est réservé. Les paramètres ont tous la valeur NULL
, à moins qu’une version debug de la bibliothèque CRT soit utilisée.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Spécifications
Routine | En-tête requis |
---|---|
_set_invalid_parameter_handler , _set_thread_local_invalid_parameter_handler |
C : <stdlib.h> C++ : <cstdlib> ou <stdlib.h> |
Les _set_invalid_parameter_handler
fonctions et _set_thread_local_invalid_parameter_handler
les fonctions sont spécifiques à Microsoft. Pour plus d’informations sur la compatibilité, consultez Compatibilité.
Exemple
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. Lorsque la bibliothèque CRT de débogage est utilisée, les erreurs de paramètre non valides déclenchent également une assertion, qui est désactivée dans cet exemple à l’aide _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 aussi
_get_invalid_parameter_handler
, _get_thread_local_invalid_parameter_handler
Versions améliorées de sécurité des fonctions CRT
errno
, _doserrno
, _sys_errlist
et _sys_nerr