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