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


_set_purecall_handler, _set_purecall_handler_m

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

_purecall_handler _set_purecall_handler( 
   _purecall_handler function
);
_purecall_handler _set_purecall_handler_m( 
   _purecall_handler_mfunction
);

Параметры

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

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

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

Заметки

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

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

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

По умолчанию для получения функциональности, вызов _set_purecall_handler сNULL аргумент.

_set_purecall_handler_m версия функции CRT в смешанном режиме.

Требования

Процедура

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

_set_purecall_handler,

_set_purecall_handler_m

<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