次の方法で共有


_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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

関連項目

エラー処理 (CRT)

_purecall