/* * This is a part of the BugTrap package. * Copyright (c) 2005-2009 IntelleSoft. * All rights reserved. * * Description: Definitions of external functions. * Author: Maksim Pyatkovskiy. * * This source code is only intended as a supplement to the * BugTrap package reference and related electronic documentation * provided with the product. See these sources for detailed * information regarding the BugTrap package. */ #ifndef _BUGTRAP_H_ #define _BUGTRAP_H_ #pragma once #if defined _MANAGED && ! defined _UNICODE #error Managed version of BugTrap requires Unicode character set #endif // _MANAGED && ! _UNICODE /* * The following ifdef block is the standard way of creating macros which make exporting * from a DLL simpler. All files within this DLL are compiled with the BUGTRAP_EXPORTS * symbol defined on the command line. this symbol should not be defined on any project * that uses this DLL. This way any other project whose source files include this file see * BUGTRAP_API functions as being imported from a DLL, whereas this DLL sees symbols * defined with this macro as being exported. */ #ifdef BUGTRAP_EXPORTS #define BUGTRAP_API __declspec(dllexport) #else #define BUGTRAP_API __declspec(dllimport) #endif // ! BUGTRAP_EXPORTS #ifdef __cplusplus extern "C" { #endif // __cplusplus /** * @defgroup TypeDef Common type definitions * @{ */ /** * @brief Type of action which is performed in response to the error. */ typedef enum BUGTRAP_ACTIVITY_tag { /** * @brief Display BugTrap dialog to allow user selecting desirable * option. This is the default option. */ BTA_SHOWUI = 1, /** * @brief Automatically save error report to file. * Use BT_SetReportFilePath() to specify report path. */ BTA_SAVEREPORT = 2, /** * @brief Automatically send error report by e-mail. */ BTA_MAILREPORT = 3, /** * @brief Automatically send bug report to support server. */ BTA_SENDREPORT = 4 } BUGTRAP_ACTIVITY; /** * @brief Different BugTrap options. You can use any combinations * of these flags. */ typedef enum BUGTRAP_FLAGS_tag { /** * @brief Equivalent of no options. */ BTF_NONE = 0x000, /** * @brief In detailed mode BugTrap generates mini-dump and * packs custom log files within the report. */ BTF_DETAILEDMODE = 0x001, /** * @brief BugTrap may open its own editor for e-mail messages * instead of the editor used by the system. Use this * option if you aren't aware of the type of e-mail * client installed on user computers. */ BTF_EDITMAIL = 0x002, /** * @brief Specify this option to attach bug report to e-mail * messages. Be careful with this option. It's potentially * dangerous for the detailed mode because of even zipped * mini-dump may require huge size. It may exceed the * maximum size of e-mail message supported by Internet * provider. */ BTF_ATTACHREPORT = 0x004, /** * @brief Set this flag to add list of all processes and loaded * modules to the report. Disable this option to speedup report * generation. */ BTF_LISTPROCESSES = 0x008, /** * @brief By default BugTrap displays simplified dialog on the * screen allowing user to perform only common actions. Enable * this flag to immediately display dialog with advanced error * information. */ BTF_SHOWADVANCEDUI = 0x010, /** * @brief Bug report in detailed error mode may also include a * screen shot automatically captured by BugTrap. By default this * option is disabled to minimize report size, but it may be useful * if you want to know which dialogs were shown on the screen. */ BTF_SCREENCAPTURE = 0x020, #ifdef _MANAGED /** * @brief Generate native stack trace and modules information along * with managed exception information. Disable this option to speedup * report generation. */ BTF_NATIVEINFO = 0x040, #endif // _MANAGED /** * @brief When enabled, BugTrap injects fake SetUnhandledExceptionFilter() * to handle the most severe C runtime errors. Usually such errors * are not being reported to custom unhandled exception filters. This * flag vanishes any attempts of C runtime library to override * unhandled exception filter defined in BugTrap. This option should * be used with caution, because such technique may be incompatible * with future Windows versions. */ BTF_INTERCEPTSUEF = 0x080, /** * @brief When report is being sent over TCP/HTTP protocol, BugTrap could * ask user to provide verbal description of the problem if this option is * enabled. BugTrap always prompts user to describe error for reports * transmitted over email regardless this option. */ BTF_DESCRIBEERROR = 0x100, /** * @brief Automatically restart the application after the crash has been * handled. */ BTF_RESTARTAPP = 0x200 } BUGTRAP_FLAGS; /** * @brief These flags control application termination mode: * whatever the application needs to be terminated after error handling, * control should passed to another exception handler. */ typedef enum BUGTRAP_EXITMODE_tag { /** * @brief BugTrap executes desirable action (usually displays the dialog). * The application is being terminated when user closes the dialog. This is default action. */ BTEM_TERMINATEAPP, /** * @brief BugTrap executes desirable action and continues to search up the stack for a handler. */ BTEM_CONTINUESEARCH, /** * @brief BugTrap executes desirable action and transfers control to the exception handlers. */ BTEM_EXECUTEHANDLER } BUGTRAP_EXITMODE; /** * @brief Set of available log levels. */ typedef enum BUGTRAP_LOGLEVEL_tag { /** * @brief All message levels are prohibited. */ BTLL_NONE = 0, /** * @brief Error message. */ BTLL_ERROR = 1, /** * @brief Waning message. */ BTLL_WARNING = 2, /** * @brief Important information message. */ BTLL_IMPORTANT = 3, /** * @brief Regular information message. */ BTLL_INFO = 4, /** * @brief Verbose information message. */ BTLL_VERBOSE = 5, /** * @brief All levels of messages are accepted. */ BTLL_ALL = BTLL_INFO } BUGTRAP_LOGLEVEL; /** * @brief Type of log echo mode. */ typedef enum BUGTRAP_LOGECHOTYPE_tag { /** * @brief Do not duplicate log output to file. */ BTLE_NONE = 0x00, /** * @brief Send a copy of log output to STDOUT (mutually exclusive with STDERR mode). */ BTLE_STDOUT = 0x01, /** * @brief Send a copy of log output to STDERR (mutually exclusive with STDOUT mode). */ BTLE_STDERR = 0x02, /** * @brief Send a copy of log output to the debugger (can accompany STDOUT or STDERR mode). */ BTLE_DBGOUT = 0x04 } BUGTRAP_LOGECHOTYPE; /** * @brief Set of log file options. */ typedef enum BUGTRAP_LOGFLAGS_tag { /** * @brief Do not show any additional entries in the log. */ BTLF_NONE = 0x00, /** * @brief Use this option if you want to store message levels in a file. */ BTLF_SHOWLOGLEVEL = 0x01, /** * @brief Use this option if you want to store message timestamps in a file. * Timestamps are stored in universal (locale independent) format: YYYY/MM/DD HH:MM:SS */ BTLF_SHOWTIMESTAMP = 0x02 } BUGTRAP_LOGFLAGS; /** * @brief Format of error report. */ typedef enum BUGTRAP_REPORTFORMAT_tag { /** * @brief Report stored in structured XML format. */ BTRF_XML = 1, /** * @brief Report stored in plain text format. */ BTRF_TEXT = 2 } BUGTRAP_REPORTFORMAT; /** * @brief Format of log file. */ typedef enum BUGTRAP_LOGFORMAT_tag { /** * @brief Log stored in structured XML format. * Log data is entirely stored in memory until application exists or crashes. * It is designed for fast IO and it cannot handle large logs. */ BTLF_XML = 1, /** * @brief Log stored in plain text format. * Log data is entirely stored in memory until application exists or crashes. * It is designed for fast IO and it cannot handle large logs. */ BTLF_TEXT = 2, /** * @brief Log stored in plain text format. * Unlike @a BTLF_XML and @a BTLF_TEXT log data is not cached in memory. * This type of log is optimized for large logs. */ BTLF_STREAM = 3 } BUGTRAP_LOGFORMAT; /** * @brief Type of user defined message displayed on the screen. */ typedef enum BUGTRAP_DIALOGMESSAGE_tag { /** * @brief 1st line of introduction message. */ BTDM_INTRO1 = 1, /** * @brief A bunch of lines of introduction message. */ BTDM_INTRO2 = 2 } BUGTRAP_DIALOGMESSAGE; /** * @brief Type of log file attached to the report. */ typedef enum BUGTRAP_LOGTYPE_tag { /** * @brief Regular log file maintained by the user. */ BTLT_LOGFILE, /** * @brief Log file that's exported from the registry. */ BTLT_REGEXPORT } BUGTRAP_LOGTYPE; /** * @brief Log file entry structure return by BT_GetLogFileEntry() for regular log files. */ typedef struct BUGTRAP_LOGFILEENTRY_tag { /** * @brief Log file name. */ TCHAR szLogFileName[MAX_PATH]; } BUGTRAP_LOGFILEENTRY; /** * @brief Log file entry structure return by BT_GetLogFileEntry() for log files exported from the registry. */ typedef struct BUGTRAP_REGEXPORTENTRY_tag { /** * @brief Log file name. */ TCHAR szLogFileName[MAX_PATH]; /** * @brief Exported registry key. */ TCHAR szRegKey[MAX_PATH]; } BUGTRAP_REGEXPORTENTRY; /** * @brief Type definition of user-defined error handler that's called before and after main BugTrap dialog. */ typedef void (CALLBACK * BT_ErrHandler)(INT_PTR nErrHandlerParam); /** @} */ /** * @defgroup AppTitle Application title management * @{ */ /** * @brief Get application name. */ BUGTRAP_API LPCTSTR APIENTRY BT_GetAppName(void); /** * @brief Set application name of the project where BugTrap is used. */ BUGTRAP_API void APIENTRY BT_SetAppName(LPCTSTR pszAppName); /** * @brief Get application version number. */ BUGTRAP_API LPCTSTR APIENTRY BT_GetAppVersion(void); /** * @brief Set application version number. */ BUGTRAP_API void APIENTRY BT_SetAppVersion(LPCTSTR pszAppVersion); /** * @brief Read application name and version number from version info block. * @note @a hModule can be set to NULL for the main executable. */ BUGTRAP_API BOOL APIENTRY BT_ReadVersionInfo(HMODULE hModule); /** @} */ /** * @defgroup UserInterface User interface customization. * @{ */ /** * @brief Get user defined message displayed on the screen. */ BUGTRAP_API LPCTSTR APIENTRY BT_GetDialogMessage(BUGTRAP_DIALOGMESSAGE eDialogMessage); /** * @brief Set user defined message displayed on the screen. */ BUGTRAP_API void APIENTRY BT_SetDialogMessage(BUGTRAP_DIALOGMESSAGE eDialogMessage, LPCTSTR pszMessage); /** @} */ /** * @defgroup SupportURL Support URL management * @{ */ /** * @brief Get HTTP address of product support site. */ BUGTRAP_API LPCTSTR APIENTRY BT_GetSupportURL(void); /** * @brief Set HTTP address of product support site. */ BUGTRAP_API void APIENTRY BT_SetSupportURL(LPCTSTR pszSupportURL); /** * @brief Get product support e-mail address. */ BUGTRAP_API LPCTSTR APIENTRY BT_GetSupportEMail(void); /** * @brief Set product support e-mail address. */ BUGTRAP_API void APIENTRY BT_SetSupportEMail(LPCTSTR pszSupportEMail); /** @} */ /** * @defgroup SrvConfig Server configuration * @{ */ /// Use this port for HTTP protocol. #define BUGTRAP_HTTP_PORT 80 /** * @brief Get host name of BugTrap Server. This server can automatically * gather bug reports for the application. */ BUGTRAP_API LPCTSTR APIENTRY BT_GetSupportHost(void); /** * @brief Set host name (address) of BugTrap Server. This server * can automatically gather bug reports for the application. */ BUGTRAP_API void APIENTRY BT_SetSupportHost(LPCTSTR pszSupportHost); /** * @brief Get port number of BugTrap Server. This server can automatically * gather bug reports for the application. */ BUGTRAP_API SHORT APIENTRY BT_GetSupportPort(void); /** * @brief Set port number of BugTrap Server. This server * can automatically gather bug reports for the application. */ BUGTRAP_API void APIENTRY BT_SetSupportPort(SHORT nSupportPort); /** * @brief Set host name (address) and port number of BugTrap Server. This server * can automatically gather bug reports for the application. */ BUGTRAP_API void APIENTRY BT_SetSupportServer(LPCTSTR pszSupportHost, SHORT nSupportPort); /** * @brief Get error notification e-mail address. * BugTrap Server may automatically notify product support by e-mail about new bug reports. */ BUGTRAP_API LPCTSTR APIENTRY BT_GetNotificationEMail(void); /** * @brief Set error notification e-mail address. * BugTrap Server may automatically notify product support by e-mail about new bug reports. */ BUGTRAP_API void APIENTRY BT_SetNotificationEMail(LPCTSTR pszNotificationEMail); /** @} */ /** * @defgroup CustomReport Report customization * @{ */ /// Disables mini-dump generation in detailed mode. #define MiniDumpNoDump MAXDWORD /** * @brief Get current BugTrap options. */ BUGTRAP_API DWORD APIENTRY BT_GetFlags(void); /** * @brief Set various BugTrap options. */ BUGTRAP_API void APIENTRY BT_SetFlags(DWORD dwFlags); /** * @brief Get the type of produced mini-dump in detailed mode. */ BUGTRAP_API DWORD APIENTRY BT_GetDumpType(void); /** * @brief Set the type of produced mini-dump in detailed mode. */ BUGTRAP_API void APIENTRY BT_SetDumpType(DWORD dwDumpType); /** * @brief Get format of error report. */ BUGTRAP_API BUGTRAP_REPORTFORMAT APIENTRY BT_GetReportFormat(void); /** * @brief Set format of error report. */ BUGTRAP_API void APIENTRY BT_SetReportFormat(BUGTRAP_REPORTFORMAT eReportFormat); /** * @brief Get user defined message. This message may be printed to a log file. */ BUGTRAP_API LPCTSTR APIENTRY BT_GetUserMessage(void); /** * @brief Set user defined message. This message may be printed to a log file. */ BUGTRAP_API void APIENTRY BT_SetUserMessage(LPCTSTR pszUserMessage); /** * @brief Set user defined message. This message may be printed to a log file. */ BUGTRAP_API void APIENTRY BT_SetUserMessageFromCode(DWORD dwErrorCode); /** @} */ /** * @defgroup SilentFunc Silent mode configuration * @{ */ /** * @brief Get the type of action which is performed in response to the error. */ BUGTRAP_API BUGTRAP_ACTIVITY APIENTRY BT_GetActivityType(void); /** * @brief Set the type of action which is performed in response to the error. */ BUGTRAP_API void APIENTRY BT_SetActivityType(BUGTRAP_ACTIVITY eActivityType); /** * @brief Get application termination mode. */ BUGTRAP_API BUGTRAP_EXITMODE APIENTRY BT_GetExitMode(void); /** * @brief Set application termination mode. */ BUGTRAP_API void APIENTRY BT_SetExitMode(BUGTRAP_EXITMODE eExitMode); /** * @brief Get the path of error report. */ BUGTRAP_API LPCTSTR APIENTRY BT_GetReportFilePath(void); /** * @brief Set the path of error report. * This function has effect only for @a BTA_SAVEREPORT activity. */ BUGTRAP_API void APIENTRY BT_SetReportFilePath(LPCTSTR pszReportFilePath); /** * @brief Get the name of MAPI profile. */ BUGTRAP_API LPCTSTR APIENTRY BT_GetMailProfile(void); /** * @brief Set the name and password of MAPI profile. */ BUGTRAP_API void APIENTRY BT_SetMailProfile(LPCTSTR pszMailProfile, LPCTSTR pszMailPassword); /** @} */ /** * @defgroup LogFiles Custom log files management * @{ */ /** * @brief Export registry key to the file. */ BUGTRAP_API int APIENTRY BT_ExportRegistryKey(LPCTSTR pszRegFile, LPCTSTR pszRegKey); /** * @brief Add custom log entry to the list of custom log files * attached to bug report. */ BUGTRAP_API void APIENTRY BT_AddLogFile(LPCTSTR pszLogFile); /** * @brief Add custom log entry to the list of custom log files * attached to bug report. */ BUGTRAP_API void APIENTRY BT_AddRegFile(LPCTSTR pszRegFile, LPCTSTR pszRegKey); /** * @brief Delete custom log entry from the list of custom log files * attached to bug report. */ BUGTRAP_API void APIENTRY BT_DeleteLogFile(LPCTSTR pszLogFile); /** * @brief Clear the list of custom log files attached to bug report. */ BUGTRAP_API void APIENTRY BT_ClearLogFiles(void); /** * @brief Get number of log files attached to the report. */ BUGTRAP_API DWORD APIENTRY BT_GetLogFilesCount(void); /** * @brief This function enumerates log file entries that will be attached to the report. */ BUGTRAP_API DWORD APIENTRY BT_GetLogFileEntry(INT_PTR nLogFileIndexOrName, BOOL bGetByIndex, BUGTRAP_LOGTYPE* peLogType, PDWORD pdwLogEntrySize, PVOID pLogEntry); /** @} */ /** * @defgroup CustomErrHandlers Custom error handlers * @{ */ /** * @brief Get address of error handler called before BugTrap dialog. */ BUGTRAP_API BT_ErrHandler APIENTRY BT_GetPreErrHandler(void); /** * @brief Set address of error handler called before BugTrap dialog. */ BUGTRAP_API void APIENTRY BT_SetPreErrHandler(BT_ErrHandler pfnPreErrHandler, INT_PTR nPreErrHandlerParam); /** * @brief Get address of error handler called after BugTrap dialog. */ BUGTRAP_API BT_ErrHandler APIENTRY BT_GetPostErrHandler(void); /** * @brief Set address of error handler called after BugTrap dialog. */ BUGTRAP_API void APIENTRY BT_SetPostErrHandler(BT_ErrHandler pfnPostErrHandler, INT_PTR nPostErrHandlerParam); /** @} */ /** * @defgroup TracingFunc Tracing functions * @{ */ /** * @brief Open custom log file. This function is thread safe. */ BUGTRAP_API INT_PTR APIENTRY BT_OpenLogFile(LPCTSTR pszLogFileName, BUGTRAP_LOGFORMAT eLogFormat); /** * @brief Close custom log file. This function is thread safe. */ BUGTRAP_API BOOL APIENTRY BT_CloseLogFile(INT_PTR iHandle); /** * @brief Flush contents of the log file. * @note This function is optional and not required in normal conditions. */ BUGTRAP_API BOOL APIENTRY BT_FlushLogFile(INT_PTR iHandle); /** * @brief Get custom log file name. This function is thread safe. */ BUGTRAP_API LPCTSTR APIENTRY BT_GetLogFileName(INT_PTR iHandle); /** * @brief Get maximum log file size in records. This function is thread safe. */ BUGTRAP_API DWORD APIENTRY BT_GetLogSizeInEntries(INT_PTR iHandle); /** * @brief Set maximum log file size in records. This function is thread safe. */ BUGTRAP_API BOOL APIENTRY BT_SetLogSizeInEntries(INT_PTR iHandle, DWORD dwLogSizeInEntries); /** * @brief Get maximum log file size in bytes. This function is thread safe. */ BUGTRAP_API DWORD APIENTRY BT_GetLogSizeInBytes(INT_PTR iHandle); /** * @brief Set maximum log file size in bytes. This function is thread safe. */ BUGTRAP_API BOOL APIENTRY BT_SetLogSizeInBytes(INT_PTR iHandle, DWORD dwLogSizeInEntries); /** * @brief Return true if time stamp is added to every log entry. */ BUGTRAP_API DWORD APIENTRY BT_GetLogFlags(INT_PTR iHandle); /** * @brief Set true if time stamp is added to every log entry. */ BUGTRAP_API BOOL APIENTRY BT_SetLogFlags(INT_PTR iHandle, DWORD dwLogFlags); /** * @brief Return minimal log level accepted by tracing functions. */ BUGTRAP_API BUGTRAP_LOGLEVEL APIENTRY BT_GetLogLevel(INT_PTR iHandle); /** * @brief Set minimal log level accepted by tracing functions. */ BUGTRAP_API BOOL APIENTRY BT_SetLogLevel(INT_PTR iHandle, BUGTRAP_LOGLEVEL eLogLevel); /** * @brief Get echo mode. */ BUGTRAP_API DWORD APIENTRY BT_GetLogEchoMode(INT_PTR iHandle); /** * @brief Set echo mode. */ BUGTRAP_API BOOL APIENTRY BT_SetLogEchoMode(INT_PTR iHandle, DWORD dwLogEchoMode); /** * @brief Clear log file. This function is thread safe. */ BUGTRAP_API BOOL APIENTRY BT_ClearLog(INT_PTR iHandle); /** * @brief Insert entry into the beginning of custom log file. This function is thread safe. */ BUGTRAP_API BOOL CDECL BT_InsLogEntryF(INT_PTR iHandle, BUGTRAP_LOGLEVEL eLogLevel, LPCTSTR pszFormat, ...); /** * @brief Append entry to the end of custom log file. This function is thread safe. */ BUGTRAP_API BOOL CDECL BT_AppLogEntryF(INT_PTR iHandle, BUGTRAP_LOGLEVEL eLogLevel, LPCTSTR pszFormat, ...); /** * @brief Insert entry into the beginning of custom log file. This function is thread safe. */ BUGTRAP_API BOOL APIENTRY BT_InsLogEntryV(INT_PTR iHandle, BUGTRAP_LOGLEVEL eLogLevel, LPCTSTR pszFormat, va_list argList); /** * @brief Append entry to the end of custom log file. This function is thread safe. */ BUGTRAP_API BOOL APIENTRY BT_AppLogEntryV(INT_PTR iHandle, BUGTRAP_LOGLEVEL eLogLevel, LPCTSTR pszFormat, va_list argList); /** * @brief Insert entry into the beginning of custom log file. This function is thread safe. */ BUGTRAP_API BOOL APIENTRY BT_InsLogEntry(INT_PTR iHandle, BUGTRAP_LOGLEVEL eLogLevel, LPCTSTR pszEntry); /** * @brief Append entry to the end of custom log file. This function is thread safe. */ BUGTRAP_API BOOL APIENTRY BT_AppLogEntry(INT_PTR iHandle, BUGTRAP_LOGLEVEL eLogLevel, LPCTSTR pszEntry); /** @} */ /** * @defgroup InternalFunc Internal functions * @{ */ /** * Explicitly installs BugTrap exception filter. * @note Normally you should not call this function. */ BUGTRAP_API LPTOP_LEVEL_EXCEPTION_FILTER APIENTRY BT_InstallSehFilter(void); /** * Explicitly uninstalls BugTrap exception filter and restores the previous exception filter. * @note Normally you should not call this function. */ BUGTRAP_API void APIENTRY BT_UninstallSehFilter(void); /** * @brief Explicitly intercepts SetUnhandledExceptionFilter() in a module. * This function could be useful for dynamically loaded modules. */ BUGTRAP_API void BT_InterceptSUEF(HMODULE hModule, BOOL bOverride); /** * @brief Take a snapshot of program memory and save it to a file. */ BUGTRAP_API BOOL APIENTRY BT_SaveSnapshot(PCTSTR pszFileName); /** * @brief Take a snapshot of program memory and save it to a file. */ BUGTRAP_API BOOL APIENTRY BT_SaveSnapshotEx(PEXCEPTION_POINTERS pExceptionPointers, PCTSTR pszFileName); /** * @brief Take a snapshot of program memory and send over network. */ BUGTRAP_API BOOL APIENTRY BT_SendSnapshot(void); /** * @brief Take a snapshot of program memory and send over network. */ BUGTRAP_API BOOL APIENTRY BT_SendSnapshotEx(PEXCEPTION_POINTERS pExceptionPointers); /** * @brief Take a snapshot of program memory and e-mail it. */ BUGTRAP_API BOOL APIENTRY BT_MailSnapshot(void); /** * @brief Take a snapshot of program memory and e-mail it. */ BUGTRAP_API BOOL APIENTRY BT_MailSnapshotEx(PEXCEPTION_POINTERS pExceptionPointers); /** * @brief Executes structured exception filter. * @note Don't call this function directly in your code. */ BUGTRAP_API LONG CALLBACK BT_SehFilter(PEXCEPTION_POINTERS pExceptionPointers); /** * @brief Simulates access violation in C++ application. Used by set_terminate(). * @note Don't call this function directly in your code. */ BUGTRAP_API void CDECL BT_CallSehFilter(void); /** * @brief Executes C++ exception filter. * @note Don't call this function directly in your code. */ BUGTRAP_API LONG CALLBACK BT_CppFilter(PEXCEPTION_POINTERS pExceptionPointers); /** * @brief Simulates access violation in C++ application. Used by set_terminate(). * @note Don't call this function directly in your code. */ BUGTRAP_API void CDECL BT_CallCppFilter(void); #ifdef _MANAGED /** * @brief Executes .NET exception filter. * @note Don't call this function directly in your code. */ BUGTRAP_API LONG CALLBACK BT_NetFilter(PEXCEPTION_POINTERS pExceptionPointers); /** * @brief Simulates access violation in .NET application. Used by set_terminate(). * @note Don't call this function directly in your code. */ BUGTRAP_API void CDECL BT_CallNetFilter(void); #endif // _MANAGED /** * Installs BugTrap handler to be called by the runtime in response to * unhandled C++ exception. */ #if defined __cplusplus && defined _INC_EH #define BT_SetTerminate() set_terminate(BT_CallCppFilter) #else #define BT_SetTerminate() #endif // __cplusplus && _INC_EH /** @} */ #ifdef __cplusplus } #endif // __cplusplus #ifdef __cplusplus #include "BTTrace.h" #if defined __ATLWIN_H__ && defined __AFX_H__ #define BT_DO_NOT_USE_DEFAULT_NAMESPACES #endif // __ATLWIN_H__ && __AFX_H__ #ifdef __ATLWIN_H__ #include "BTAtlWindow.h" #endif // __ATLWIN_H__ #ifdef __AFX_H__ #include "BTMfcWindow.h" #endif // __AFX_H__ #endif // __cplusplus #endif // _BUGTRAP_H_