Freigeben über


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

Siehe auch

Fehlerbehandlung
_purecall