_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 のは関数の戻り値の型です。
戻り値
前の _purecall_handler。前のハンドラーがない場合は NULL を返します。
解説
純粋仮想関数をキャッチし特定の方法でユーザーに報告するかデバッグにキャッチするには_set_purecall_handler を使用します。
プロセス全体の 1 _purecall_handler があるためこの関数を呼び出すとすべてのスレッドに影響します。すべてのスレッドで最後の呼び出し元はハンドラーを設定します。
動的にリンクされる DLL または実行可能ファイルの _set_purecall_handler 一つのハンドラーがあります。; _set_purecall_handler を呼び出した場合でもハンドラーは別の置換したり別の DLL または実行可能ファイルとハンドラーを置き換えるに設定されます。
既定の動作を復元するにはNULL の引数 で _set_purecall_handler を呼び出します。
関数の _set_purecall_handler_m のバージョンが混在モードを使用します。
必要条件
ルーチン |
必須ヘッダー |
---|---|
_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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。