Share via


_set_purecall_handler、_set_purecall_handler_m

更新 : 2007 年 11 月

純粋仮想関数呼び出しのハンドラを設定します。

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

パラメータ

  • function
    純粋仮想関数を呼び出すときに呼び出される関数。_purecall_handler または _purecall_handler_m 関数の戻り値は void 型です。

戻り値

直前の _purecall_handler。直前のハンドラがない場合は、NULL を返します。

解説

_set_purecall_handler は、純粋仮想関数をキャッチして特定の方法でユーザーに報告したり、デバッグのために純粋仮想関数をキャッチしたりする場合に使用します。

プロセス全体に対して _purecall_handler は 1 つしかないので、この関数を呼び出すと即座にすべてのスレッドに影響します。いずれかのスレッドで最後に関数を呼び出した処理がハンドラを設定します。

動的にリンクされるすべての DLL または実行可能ファイルに対し、_set_purecall_handler ハンドラは 1 つだけです。そのため、_set_purecall_handler を呼び出しても、ハンドラが別のハンドラに置き換えられたり、別の DLL または実行可能ファイルで設定されたハンドラを置き換えたりする場合があります。

既定の動作に戻すには、NULL 引数を使用して _set_purecall_handler を呼び出します。

関数の _set_purecall_handler_m バージョンは、混合モード CRT 用です。

必要条件

ルーチン

必須ヘッダー

_set_purecall_handler,

_set_purecall_handler_m

<stdlib.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

使用例

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

.NET Framework の相当するアイテム

適用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

参照

エラー処理 (CRT)