次の方法で共有


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

参照

関連項目

エラー処理 (CRT)

_purecall