Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler

 

Définit une fonction à appeler lorsque la bibliothèque CRT détecte un argument non valide.

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

[in] pNew

Le pointeur de fonction pour le nouveau gestionnaire de paramètre non valide.

Pointeur vers le Gestionnaire de paramètre non valide avant l’appel.

Plusieurs fonctions de runtime C vérifient la validité d’arguments passés à eux. Si un argument non valide est passé, la fonction peut définir le errno retournent un code d’erreur ou le numéro d’erreur. Dans ce cas, le Gestionnaire de paramètre non valide est également appelé. Le runtime C fournit un gestionnaire de globale de paramètres non valides par défaut qui termine le programme et affiche un message d’erreur d’exécution. Vous pouvez utiliser la _set_invalid_parameter_handler pour définir votre propre fonction en tant que le Gestionnaire de paramètre non valide global. La bibliothèque C runtime prend également 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 runtime C appelées depuis le thread utilisent ce gestionnaire au lieu du gestionnaire global. Une seule fonction peut être spécifiée comme gestionnaire global argument non valide à la fois. Une seule fonction peut être spécifiée en tant que le Gestionnaire d’argument non valide locales de thread par thread, mais différents threads peuvent avoir différents gestionnaires de thread local. Cela vous permet de modifier le gestionnaire utilisé dans une partie de votre code sans affecter le comportement des autres threads.

Lorsque le runtime appelle la fonction de paramètre non valide, cela signifie généralement qu’une erreur non récupérable s’est produite. La fonction de gestionnaire de paramètre non valide que vous fournissez doit enregistrer toutes les données qu’il peut, puis abandonner. Il ne doit pas renvoyer contrôle à la fonction main, 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
);

Le expression argument est une représentation de chaîne étendue de l’expression d’argument qui a généré l’erreur. Le function argument correspond au nom de la fonction CRT qui a reçu l’argument non valide. Le file argument est le nom du fichier source CRT qui contient la fonction. Le line argument est le numéro de ligne dans le fichier. Le dernier argument est réservé. Tous les paramètres ont la valeur NULL sauf si une version debug de la bibliothèque CRT est utilisée.

Configuration requise

Routine

En-tête requis

_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler

C: < stdlib.h >

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

Le _set_invalid_parameter_handler et _set_thread_local_invalid_parameter_handler les fonctions sont spécifiques de Microsoft. Pour plus d’informations sur la compatibilité, consultez Compatibilité.

Exemple

Dans l’exemple suivant, un gestionnaire d’erreurs de paramètre non valide est utilisé pour imprimer la fonction qui a reçu le paramètre non valide et le fichier et ligne dans les sources de CRT. Lors de l’utilisation de la bibliothèque de débogage CRT, les erreurs de paramètre non valide également déclenchent une assertion, qui est désactivée dans cet exemple à l’aide de _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);
}
Paramètre non valide détectée dans la fonction common_vfprintf. Fichier : minkernel\crts\ucrt\src\appcrt\stdio\output.cpp ligne : Expression 32 : format ! = nullptr
Afficher: