_get_purecall_handler
, _set_purecall_handler
Ruft den Handler für einen rein virtuellen Funktionsaufruf ab oder legt diesen fest.
Syntax
typedef void (__cdecl* _purecall_handler)(void);
_purecall_handler __cdecl _get_purecall_handler(void);
_purecall_handler __cdecl _set_purecall_handler(
_purecall_handler function
);
Parameter
function
Die aufzurufende Funktion, wenn eine rein virtuelle Funktion aufgerufen wird. Eine _purecall_handler
-Funktion muss einen void-Rückgabetyp haben.
Rückgabewert
Der vorherige _purecall_handler
. Gibt nullptr
, wenn kein vorheriger Handler vorhanden ist.
Hinweise
Die _get_purecall_handler
- und _set_purecall_handler
-Funktionen sind Microsoft-spezifisch und gelten nur für C++-Code.
Ein Aufruf an eine rein virtuelle Funktion ist ein Fehler, da sie keine Implementierung hat. Standardmäßig generiert der Compiler einen Code, um eine Fehlerhandlerfunktion aufzurufen, wenn eine reine virtuelle Funktion aufgerufen wird, womit das Programm beendet wird. Sie können Ihre eigene Fehlerhandlerfunktion für rein virtuelle Funktionsaufrufe installieren, um sie für das Debuggen und für Berichtszwecke abzufangen. Um Ihren eigenen Fehlerhandler zu verwenden, erstellen Sie eine Funktion mit der _purecall_handler
-Signatur und verwenden Sie anschließend _set_purecall_handler
, um ihn als den aktuellen Handler festzulegen.
Da es nur einen _purecall_handler
für jeden Prozess gibt, wirkt sich der Aufruf _set_purecall_handler
sofort auf alle Threads aus. Der letzte Aufrufer in einem beliebigen Thread legt den Handler fest.
Rufen Sie zum Wiederherstellen des Standardverhaltens _set_purecall_handler
mit einem nullptr
-Argument auf.
Anforderungen
Routine | Erforderlicher Header |
---|---|
_get_purecall_handler , _set_purecall_handler |
<cstdlib> oder <stdlib.h> |
Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// _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.