_get_purecall_handler
, _set_purecall_handler
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.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin