_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
純粋仮想関数を呼び出すときに呼び出される関数。 _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;
}
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。