Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Saf bir sanal işlev çağrısı için hata işleyicisini alır veya ayarlar.
Sözdizimi
typedef void (__cdecl* _purecall_handler)(void);
_purecall_handler __cdecl _get_purecall_handler(void);
_purecall_handler __cdecl _set_purecall_handler(
_purecall_handler function
);
Parametreler
function
Saf bir sanal işlev çağrıldığında çağrılacak işlev. bir _purecall_handler işlevin geçersiz dönüş türü olmalıdır.
Dönüş değeri
Önceki _purecall_handler. Önceki işleyici yoksa döndürür nullptr .
Açıklamalar
ve _set_purecall_handler işlevleri Microsoft'a _get_purecall_handler özgü olup yalnızca C++ koduna uygulanır.
Saf bir sanal işleve yapılan çağrı, uygulaması olmadığından bir hatadır. Varsayılan olarak, derleyici saf bir sanal işlev çağrıldığında hata işleyici işlevini çağırmak için kod oluşturur ve bu da programı sonlandırır. Hata ayıklama veya raporlama amacıyla yakalamak üzere saf sanal işlev çağrıları için kendi hata işleyici işlevinizi yükleyebilirsiniz. Kendi hata işleyicinizi kullanmak için, imzasını _purecall_handler içeren bir işlev oluşturun, ardından bunu geçerli işleyici yapmak için kullanın _set_purecall_handler .
Her işlem için yalnızca bir tane _purecall_handler olduğundan, çağırdığınızda _set_purecall_handler tüm iş parçacıkları hemen etkilenir. Herhangi bir iş parçacığındaki son çağıran işleyiciyi ayarlar.
Varsayılan davranışı geri yüklemek için bir nullptr bağımsız değişken kullanarak çağırın_set_purecall_handler.
Gereksinimler
| Yordam | Gerekli başlık |
|---|---|
_get_purecall_handler, _set_purecall_handler |
<cstdlib> veya <stdlib.h> |
Uyumluluk bilgileri için bkz . Uyumluluk.
Örnek
// _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.