Поделиться через


_set_purecall_handler

Задает обработчик для вызова чистой виртуальной функции.

_purecall_handler _set_purecall_handler(     _purecall_handler function );

Параметры

  • function
    Эту функцию необходимо вызывать при вызове чистой виртуальной функции. Функция _purecall_handler должна иметь тип возвращаемого значения void.

Возвращаемое значение

Предыдущая функция _purecall_handler. Возвращает NULL, если не было предыдущего обработчика.

Заметки

Используйте функцию _set_purecall_handler, если требуется перехватить чистые виртуальные функции и сообщить о них пользователю определенным образом (либо перехватить их в целях отладки).

Поскольку для всего процесса предусмотрена одна функция _purecall_handler, вызов этой функции немедленно влияет на все потоки. Последний вызывающий элемент в любом потоке задает обработчик.

Для всех динамически связанных библиотек DLL и исполняемых файлов предусмотрен один обработчик _set_purecall_handler; даже если вы вызываете _set_purecall_handler, ваш обработчик может быть заменен другим или сам может заменить обработчик, заданный другой библиотекой DLL или исполняемым файлом.

Чтобы восстановить поведение по умолчанию, вызовите _set_purecall_handler с аргументом NULL.

Требования

Подпрограмма

Обязательный заголовок

_set_purecall_handler

<stdlib.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Пример

// _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;
}
  

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызова неуправляемого кода.

См. также

Ссылки

Обработка ошибок (CRT)

_purecall