#pragma once #include #include #include #include #ifdef C_CALL_STACK_EXPORTS #define C_CALL_STACK_DLL_API __declspec(dllexport) #else #define C_CALL_STACK_DLL_API //__declspec(dllimport) #endif // Ìí¼Ó¶Ôdbghelp.libµÄ±àÒëÒÀÀµ #pragma comment(lib, "dbghelp.lib") using namespace std; namespace ns_ccs { #define MAX_ADDRESS_LENGTH 32 #define MAX_NAME_LENGTH 1024 typedef VOID(_stdcall* CallBackCallStack) (VOID); typedef struct _CrashInfo { CHAR ErrorCode[MAX_ADDRESS_LENGTH]; CHAR Address[MAX_ADDRESS_LENGTH]; CHAR Flags[MAX_ADDRESS_LENGTH]; }CrashInfo; typedef struct _CallStackInfo { CHAR ModuleName[MAX_NAME_LENGTH]; CHAR MethodName[MAX_NAME_LENGTH]; CHAR FileName[MAX_NAME_LENGTH]; CHAR LineNumber[MAX_NAME_LENGTH]; }CallStackInfo; class C_CALL_STACK_DLL_API CCallStack { public: void SafeStrCpy(char* szDest, size_t nMaxDestSize, const char* szSrc); CrashInfo GetCrashInfo(const EXCEPTION_RECORD *pRecord); vector GetCallStack(const CONTEXT *pContext); CCallStack(); }; } EXTERN_C C_CALL_STACK_DLL_API LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException);