Share via


_get_purecall_handler, _set_purecall_handler

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

Syntaxe

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.

Valeur retournée

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

Notes

Les fonctions _get_purecall_handler et _set_purecall_handler sont des fonctions fournies par Microsoft et s’appliquent uniquement au code C++.

Un appel à une fonction virtuelle pure est une erreur, car elle n’a pas d’implémentation. Par défaut, le compilateur génère du code pour appeler une fonction de gestionnaire d’erreurs quand 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 les intercepter à des fins de débogage ou de création de rapports. Pour utiliser votre propre gestionnaire d’erreurs, créez une fonction qui a la signature _purecall_handler, puis utilisez _set_purecall_handler afin d’en faire le gestionnaire actuel.

Étant donné qu’il n’y en a qu’un _purecall_handler seul pour chaque processus, lorsque vous l’appelez _set_purecall_handler immédiatement impacte tous les threads. Le dernier appelant au niveau d'un thread est celui qui définit le gestionnaire.

Pour rétablir le comportement par défaut, appelez _set_purecall_handler à l’aide d’un argument nullptr.

Spécifications

Routine En-tête requis
_get_purecall_handler, _set_purecall_handler <cstdlib> ou <stdlib.h>

Pour plus d’informations sur la compatibilité, consultez Compatibilité.

Exemple

// _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.

Voir aussi

Gestion des erreurs
_purecall