_get_purecall_handler, _set_purecall_handler

 

Date de publication : novembre 2016

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Obtient ou définit le Gestionnaire d’erreurs pour un appel de fonction virtuelle pure.

typedef void (__cdecl* _purecall_handler)(void);  
  
_purecall_handler __cdecl _get_purecall_handler(void);  
  
_purecall_handler __cdecl _set_purecall_handler(   
   _purecall_handler function  
);  

Paramètres

function
Fonction à appeler quand une fonction virtuelle pure est appelée. Une fonction _purecall_handler doit avoir un type de retour void.

_purecall_handler précédent. Retourne nullptr s'il n'existait pas de gestionnaire précédemment.

Le _get_purecall_handler et _set_purecall_handler fonctions sont spécifiques à Microsoft et s’appliquent uniquement au code C++.

Un appel à une fonction virtuelle pure est une erreur, car il n’a aucune implémentation. Par défaut, le compilateur génère du code pour appeler une fonction de gestionnaire d’erreurs lorsqu’une fonction virtuelle pure est appelée, ce qui met fin au programme. Vous pouvez installer votre propre fonction de gestionnaire d’erreurs pour les appels de fonction virtuelle pure, pour intercepter les fins de débogage ou de création de rapports. Pour utiliser votre propre gestionnaire d’erreurs, créez une fonction qui possède le _purecall_handler signature, puis utiliser _set_purecall_handler afin de faciliter le gestionnaire en cours.

Étant donné qu’un seul _purecall_handler pour chaque processus, lorsque vous appelez _set_purecall_handler son impact immédiatement sur tous les threads. Le dernier appelant au niveau d'un thread est celui qui définit le gestionnaire.

Pour restaurer le comportement par défaut, appelez _set_purecall_handler en utilisant un nullptr argument.

RoutineEn-tête requis
_get_purecall_handler, _set_purecall_handler<>>ou<stdlib.h></stdlib.h>

Pour plus d'informations sur la compatibilité, voir Compatibilité.

// _set_purecall_handler.cpp  
// compile with: /W1  
#include <tchar.h>  
#include <stdio.h>  
#include <stdlib.h>  
  
class CDerived;  
class CBase  
{  
public:  
   CBase(CDerived *derived): m_pDerived(derived) {};  
   ~CBase();  
   virtual void function(void) = 0;  
  
   CDerived * m_pDerived;  
};  
  
class CDerived : public CBase  
{  
public:  
   CDerived() : CBase(this) {};   // C4355  
   virtual void function(void) {};  
};  
  
CBase::~CBase()  
{  
   m_pDerived -> function();  
}  
  
void myPurecallHandler(void)  
{  
   printf("In _purecall_handler.");  
   exit(0);  
}  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
   _set_purecall_handler(myPurecallHandler);  
   CDerived myDerived;  
}  

In _purecall_handler.  

Gestion des erreurs
_purecall

Afficher: