Sdílet prostřednictvím


_CrtSetReportHook2 _CrtSetReportHookW2

Nainstaluje nebo odinstaluje přídavné funkce klienta definované podle zapojení do c spuštění ladění procesu (pouze ladicí verze) vykazování.

int _CrtSetReportHook2(
   int mode,
   _CRT_REPORT_HOOK pfnNewHook
);
int _CrtSetReportHookW2(
   int mode,
   _CRT_REPORT_HOOKW pfnNewHook
);

Parametry

  • mode
    Akci: _CRT_RPTHOOK_INSTALL nebo _CRT_RPTHOOK_REMOVE.

  • pfnNewHook
    Sestava háčkem instalace nebo odebrání znaků úzký verze této funkce.

  • pfnNewHook
    Sestava háčkem instalace nebo odstranění celého znaku verze této funkce.

Vrácená hodnota

-1, pokud došlo k chybě, s EINVAL nebo ENOMEM nastavení; v opačném případě vrátí referenční počet pfnNewHook po volání.

Poznámky

_CrtSetReportHook2a _CrtSetReportHookW2 umožňují zavěšení nebo vyjmutí funkci, že _CrtSetReportHook umožňuje pouze funkci zavěšení.

_CrtSetReportHook2nebo _CrtSetReportHookW2 by měl použít místo _CrtSetReportHook při zavěšení zavolání se knihovna DLL a kdy může načíst více knihoven DLL a nastavení jejich zavěšení funkce.Než bylo naloženo a háčkem funkce může být ponecháno na vyložení DLL, můžete v takové situaci uvolňování knihoven DLL v jiném pořadí.Výstup ladění dojde proces s byly přidány funkce háčkem _CrtSetReportHook.

Žádné zavěšení přidané pomocí funkce _CrtSetReportHook se nazývají, pokud neexistují žádné háčkem přidány funkce s _CrtSetReportHook2 nebo _CrtSetReportHookW2 nebo pokud všechny zavěšení přidané pomocí funkce _CrtSetReportHook2 a _CrtSetReportHookW2 vrátit FALSE.

Znak wide verze této funkce je k dispozici.Funkce háčkem zprávu přijmout řetězec, jehož typ (úzký široké znaků) musí odpovídat verzi této funkce.Použijte následující funkce prototypu háčků sestavy s širokým znak verze této funkce:

int YourReportHook( int reportType, wchar_t *message, int *returnValue );

Použijte následující prototypu háky úzký znak sestavy:

int YourReportHook( int reportType, char *message, int *returnValue );

Tyto funkce ověřit jejich parametrů.Pokud mode nebo pfnNewNook je neplatný, tyto funkce vyvolat popisovač neplatný parametr popsaným v Ověření parametrů.Pokud je povoleno spuštění pokračovat, nastavit tyto funkce errno na EINVAL a vrátí -1.

[!POZNÁMKA]

Pokud aplikace je kompilována s /clr a přídavné funkce se nazývá po aplikaci byl ukončen hlavní, CLR vyvolají výjimku, pokud zpravodajské funkce volá všechny funkce CRT.

Požadavky

Rutina

Požadované záhlaví

Volitelné záhlaví

_CrtSetReportHook2

<crtdbg.h>

<errno.h>

_CrtSetReportHookW2

<crtdbg.h>

<errno.h>

Další informace o kompatibilitě v tématu Compatibility v úvodu.

Knihovny

Ladění verze C Runtime knihovny pouze.

Příklad

// crt_setreporthook2.c
#include <windows.h>
#include <stdio.h>
#include <crtdbg.h>
#include <assert.h>

int __cdecl TestHook1(int nReportType, char* szMsg, int* pnRet)
{
   int nRet = FALSE;

   printf("CRT report hook 1.\n");
   printf("CRT report type is \"");
   switch (nReportType)
   {
      case _CRT_ASSERT:
      {
         printf("_CRT_ASSERT");
         // nRet = TRUE;   // Always stop for this type of report
         break;
      }

      case _CRT_WARN:
      {
         printf("_CRT_WARN");
         break;
      }

      case _CRT_ERROR:
      {
         printf("_CRT_ERROR");
         break;
      }

      default:
      {
         printf("???Unknown???");
         break;
      }
   }

   printf("\".\nCRT report message is:\n\t");
   printf(szMsg);

   if   (pnRet)
      *pnRet = 0;

   return   nRet;
}

int __cdecl   TestHook2(int nReportType, char* szMsg, int* pnRet)
{
   int   nRet = FALSE;

   printf("CRT report hook 2.\n");
   printf("CRT report type is \"");
   switch   (nReportType)
   {
      case _CRT_WARN:
      {
         printf("_CRT_WARN");
         break;
      }

      case _CRT_ERROR:
      {
         printf("_CRT_ERROR");
         break;
      }

      case _CRT_ASSERT:
      {
         printf("_CRT_ASSERT");
         nRet = TRUE;   // Always stop for this type of report
         break;
      }

      default:
      {
         printf("???Unknown???");
         break;
      }
   }

   printf("\".\nCRT report message is: \t");
   printf(szMsg);

   if   (pnRet)
      *pnRet = 0;
   // printf("CRT report code is %d.\n", *pnRet);
   return   nRet;
}

int   main(int argc, char* argv[])
{
   int   nRet = 0;

   nRet = _CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook1);
   printf("_CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook1)"
          " returned %d\n", nRet);
   nRet = _CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook2);
   printf("_CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook2)"
          " returned %d\n", nRet);
   nRet = _CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook2);
   printf("_CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook2)"
          " returned %d\n", nRet);
   nRet = _CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook1);
   printf("_CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook1)"
          " returned %d\n", nRet);
   nRet = _CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook1);
   printf("_CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook1)"
          " returned %d\n", nRet);

   _ASSERT(0);

   nRet = _CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook2);
   printf("_CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook2)"
          " returned %d\n", nRet);
   nRet = _CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook2);
   printf("_CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook2)"
          " returned %d\n", nRet);
   nRet = _CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook2);
   printf("_CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook2)"
          " returned %d\n", nRet);
   nRet = _CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook1);
   printf("_CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook1)"
          " returned %d\n", nRet);

   return   nRet;
}

Výsledek

_CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook1) returned 0
_CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook2) returned 0
_CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook2) returned 0
_CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook1) returned 0
_CrtSetReportHook2(_CRT_RPTHOOK_INSTALL, TestHook1) returned 0
_CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook2) returned 0
_CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook2) returned 0
_CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook2) returned 0
_CrtSetReportHook2(_CRT_RPTHOOK_REMOVE, TestHook1) returned 0

Viz také

Referenční dokumentace

Ladění rutin