diff --git a/cvAutoTrack/src/cvAutoTrack.cpp b/cvAutoTrack/src/cvAutoTrack.cpp index 6d04d24e..76c980cd 100644 --- a/cvAutoTrack/src/cvAutoTrack.cpp +++ b/cvAutoTrack/src/cvAutoTrack.cpp @@ -6,151 +6,141 @@ #include "ErrorCode.h" #include "AutoTrack.h" - -//定义一个装饰器做异常处理 -#define TRY_CATCH(func,defaultVal)\ -try {\ - return func;\ -}\ -catch (std::exception ex)\ -{\ - err = { 999,std::format("std错误:{0}",ex.what()) };\ - return defaultVal;\ -} - +#define INSTALL_DUMP(at_func)\ + INSTALL_DUMP_();\ + return at_func static AutoTrack _at; -static ErrorCode& err = ErrorCode::getInstance(); bool __stdcall verison(char* versionBuff) { - TRY_CATCH(_at.GetVersion(versionBuff,32),false); + INSTALL_DUMP(_at.GetVersion(versionBuff,32)); } bool __stdcall init() { - TRY_CATCH(_at.init(),false); + INSTALL_DUMP(_at.init()); } bool __stdcall uninit() { - TRY_CATCH(_at.uninit(),false); + INSTALL_DUMP(_at.uninit()); } bool __stdcall SetUseBitbltCaptureMode() { - TRY_CATCH(_at.SetUseBitbltCaptureMode(),false); + INSTALL_DUMP(_at.SetUseBitbltCaptureMode()); } bool __stdcall SetUseDx11CaptureMode() { - TRY_CATCH(_at.SetUseDx11CaptureMode(),false); + INSTALL_DUMP(_at.SetUseDx11CaptureMode()); } bool __stdcall SetHandle(long long int handle = 0) { - TRY_CATCH(_at.SetHandle(handle),false); + INSTALL_DUMP(_at.SetHandle(handle)); } bool __stdcall SetWorldCenter(double x, double y) { - TRY_CATCH(_at.SetWorldCenter(x, y),false); + INSTALL_DUMP(_at.SetWorldCenter(x, y)); } bool __stdcall SetWorldScale(double scale) { - TRY_CATCH(_at.SetWorldScale(scale),false); + INSTALL_DUMP(_at.SetWorldScale(scale)); } bool __stdcall ImportMapBlock(int id_x, int id_y, const char* image_data, int image_data_size, int image_width, int image_height) { - TRY_CATCH(_at.ImportMapBlock(id_x, id_y, image_data, image_data_size, image_width, image_height),false); + INSTALL_DUMP(_at.ImportMapBlock(id_x, id_y, image_data, image_data_size, image_width, image_height)); } bool __stdcall ImportMapBlockCenter(int x, int y) { - TRY_CATCH(_at.ImportMapBlockCenter(x, y),false); + INSTALL_DUMP(_at.ImportMapBlockCenter(x, y)); } bool __stdcall ImportMapBlockCenterScale(int x, int y, double scale) { - TRY_CATCH(_at.ImportMapBlockCenterScale(x, y, scale),false); + INSTALL_DUMP(_at.ImportMapBlockCenterScale(x, y, scale)); } bool __stdcall GetTransformOfMap(double& x, double& y, double& a, int& mapId) { - TRY_CATCH(_at.GetTransformOfMap(x, y, a, mapId),false); + INSTALL_DUMP(_at.GetTransformOfMap(x, y, a, mapId)); } bool __stdcall GetPositionOfMap(double& x, double& y, int& mapId) { - TRY_CATCH(_at.GetPositionOfMap(x, y, mapId),false); + INSTALL_DUMP(_at.GetPositionOfMap(x, y, mapId)); } bool __stdcall GetDirection(double & a) { - TRY_CATCH(_at.GetDirection(a),false); + INSTALL_DUMP(_at.GetDirection(a)); } bool __stdcall GetRotation(double & a) { - TRY_CATCH(_at.GetRotation(a),false); + INSTALL_DUMP(_at.GetRotation(a)); } bool __stdcall GetStar(double &x, double &y, bool &isEnd) { - TRY_CATCH(_at.GetStar(x, y, isEnd),false); + INSTALL_DUMP(_at.GetStar(x, y, isEnd)); } bool __stdcall GetStarJson(char * jsonBuff) { - TRY_CATCH(_at.GetStarJson(jsonBuff),false); + INSTALL_DUMP(_at.GetStarJson(jsonBuff)); } bool __stdcall GetUID(int & uid) { - TRY_CATCH(_at.GetUID(uid),false); + INSTALL_DUMP(_at.GetUID(uid)); } bool __stdcall GetAllInfo(double& x, double& y, int& mapId, double& a, double& r, int& uid) { - TRY_CATCH(_at.GetAllInfo(x, y, mapId, a, r, uid),false); + INSTALL_DUMP(_at.GetAllInfo(x, y, mapId, a, r, uid)); } bool __stdcall GetInfoLoadPicture(char * path, int & uid, double & x, double & y, double & a) { - TRY_CATCH(_at.GetInfoLoadPicture(path, uid, x, y, a),false); + INSTALL_DUMP(_at.GetInfoLoadPicture(path, uid, x, y, a)); } bool __stdcall GetInfoLoadVideo(char * path, char * pathOutFile) { - TRY_CATCH(_at.GetInfoLoadVideo(path, pathOutFile),false); + INSTALL_DUMP(_at.GetInfoLoadVideo(path, pathOutFile)); } int __stdcall GetLastErr() { - TRY_CATCH(_at.GetLastError(),999); + INSTALL_DUMP(_at.GetLastError()); } int __stdcall GetLastErrMsg(char* msg_buff, int buff_size) { - TRY_CATCH(_at.GetLastErrMsg(msg_buff, buff_size),999); + INSTALL_DUMP(_at.GetLastErrMsg(msg_buff, buff_size)); } int __stdcall GetLastErrJson(char* json_buff, int buff_size) { - TRY_CATCH(_at.GetLastErrJson(json_buff, buff_size),999); + INSTALL_DUMP(_at.GetLastErrJson(json_buff, buff_size)); } bool __stdcall SetDisableFileLog() { - TRY_CATCH(_at.SetDisableFileLog(),false); + INSTALL_DUMP(_at.SetDisableFileLog()); } bool __stdcall SetEnableFileLog() { - TRY_CATCH(_at.SetEnableFileLog(),false); + INSTALL_DUMP(_at.SetEnableFileLog()); } bool __stdcall GetCompileVersion(char* version_buff, int buff_size) { - TRY_CATCH(_at.GetVersion(version_buff, buff_size),false); + INSTALL_DUMP(_at.GetVersion(version_buff, buff_size)); } bool __stdcall GetCompileTime(char* time_buff, int buff_size) { - TRY_CATCH(_at.GetCompileTime(time_buff, buff_size),false); + INSTALL_DUMP(_at.GetCompileTime(time_buff, buff_size)); } bool __stdcall GetMapIsEmbedded() { - TRY_CATCH(_at.GetMapIsEmbedded(),false); + INSTALL_DUMP(_at.GetMapIsEmbedded()); } bool __stdcall DebugCapture() { - TRY_CATCH(_at.DebugCapture(),false); + INSTALL_DUMP(_at.DebugCapture()); } bool __stdcall DebugCapturePath(const char* path_buff, int buff_size) { - TRY_CATCH(_at.DebugCapturePath(path_buff, buff_size),false); + INSTALL_DUMP(_at.DebugCapturePath(path_buff, buff_size)); } bool __stdcall startServe() { - TRY_CATCH(_at.startServe(),false); + INSTALL_DUMP(_at.startServe()); } bool __stdcall stopServe() { - TRY_CATCH(_at.stopServe(),false); + INSTALL_DUMP(_at.stopServe()); } \ No newline at end of file diff --git a/cvAutoTrack/src/dllmain.cpp b/cvAutoTrack/src/dllmain.cpp index af91352a..d6a98280 100644 --- a/cvAutoTrack/src/dllmain.cpp +++ b/cvAutoTrack/src/dllmain.cpp @@ -1,81 +1,11 @@ #include "pch.h" - - -#include "Windows.h" -#include "DbgHelp.h" -#include "tchar.h" - -int GenerateMiniDump(PEXCEPTION_POINTERS pExceptionPointers) -{ - // 定义函数指针 - typedef BOOL(WINAPI* MiniDumpWriteDumpT)( - HANDLE, - DWORD, - HANDLE, - MINIDUMP_TYPE, - PMINIDUMP_EXCEPTION_INFORMATION, - PMINIDUMP_USER_STREAM_INFORMATION, - PMINIDUMP_CALLBACK_INFORMATION - ); - // 从 "DbgHelp.dll" 库中获取 "MiniDumpWriteDump" 函数 - MiniDumpWriteDumpT pfnMiniDumpWriteDump = NULL; - HMODULE hDbgHelp = LoadLibrary(_T("DbgHelp.dll")); - if (NULL == hDbgHelp) - { - return EXCEPTION_CONTINUE_EXECUTION; - } - pfnMiniDumpWriteDump = (MiniDumpWriteDumpT)GetProcAddress(hDbgHelp, "MiniDumpWriteDump"); - - if (NULL == pfnMiniDumpWriteDump) - { - FreeLibrary(hDbgHelp); - return EXCEPTION_CONTINUE_EXECUTION; - } - // 创建 dmp 文件件 - TCHAR szFileName[MAX_PATH] = { 0 }; - TCHAR szVersion[] = TEXT("cvAutoTrack"); - SYSTEMTIME stLocalTime; - GetLocalTime(&stLocalTime); - wsprintf(szFileName, L"%s-%04d%02d%02d-%02d%02d%02d.dmp", - szVersion, stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay, - stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond); - HANDLE hDumpFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_WRITE | FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0); - if (INVALID_HANDLE_VALUE == hDumpFile) - { - FreeLibrary(hDbgHelp); - return EXCEPTION_CONTINUE_EXECUTION; - } - // 写入 dmp 文件 - MINIDUMP_EXCEPTION_INFORMATION expParam; - expParam.ThreadId = GetCurrentThreadId(); - expParam.ExceptionPointers = pExceptionPointers; - expParam.ClientPointers = FALSE; - pfnMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), - hDumpFile, MiniDumpWithDataSegs, (pExceptionPointers ? &expParam : NULL), NULL, NULL); - // 释放文件 - CloseHandle(hDumpFile); - FreeLibrary(hDbgHelp); - return EXCEPTION_EXECUTE_HANDLER; -} - -LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo) -{ - // 这里做一些异常的过滤或提示 - if (IsDebuggerPresent()) - { - return EXCEPTION_CONTINUE_SEARCH; - } - return GenerateMiniDump(lpExceptionInfo); -} - BOOL APIENTRY DllMain(HMODULE /*hModule*/, DWORD ul_reason_for_call, LPVOID /*lpReserved*/ ) { - SetUnhandledExceptionFilter(ExceptionFilter); + INSTALL_DUMP_(); switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: diff --git a/cvAutoTrack/src/pch.h b/cvAutoTrack/src/pch.h index 239e947e..d2c6c815 100644 --- a/cvAutoTrack/src/pch.h +++ b/cvAutoTrack/src/pch.h @@ -71,4 +71,70 @@ #include "capture/dxgi/include/direct3d11.interop.h" #include "capture/dxgi/include/capture.interop.h" +// DUMP部分 +#include "Windows.h" +#include "DbgHelp.h" +#include "tchar.h" +inline int GenerateMiniDump(PEXCEPTION_POINTERS pExceptionPointers) +{ + // 定义函数指针 + typedef BOOL(WINAPI* MiniDumpWriteDumpT)( + HANDLE, + DWORD, + HANDLE, + MINIDUMP_TYPE, + PMINIDUMP_EXCEPTION_INFORMATION, + PMINIDUMP_USER_STREAM_INFORMATION, + PMINIDUMP_CALLBACK_INFORMATION + ); + // 从 "DbgHelp.dll" 库中获取 "MiniDumpWriteDump" 函数 + MiniDumpWriteDumpT pfnMiniDumpWriteDump = NULL; + HMODULE hDbgHelp = LoadLibrary(_T("DbgHelp.dll")); + if (NULL == hDbgHelp) + { + return EXCEPTION_CONTINUE_EXECUTION; + } + pfnMiniDumpWriteDump = (MiniDumpWriteDumpT)GetProcAddress(hDbgHelp, "MiniDumpWriteDump"); + + if (NULL == pfnMiniDumpWriteDump) + { + FreeLibrary(hDbgHelp); + return EXCEPTION_CONTINUE_EXECUTION; + } + // 创建 dmp 文件件 + TCHAR szFileName[MAX_PATH] = { 0 }; + TCHAR szVersion[] = TEXT("cvAutoTrack"); + SYSTEMTIME stLocalTime; + GetLocalTime(&stLocalTime); + wsprintf(szFileName, L"%s-%04d%02d%02d-%02d%02d%02d.dmp", + szVersion, stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay, + stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond); + HANDLE hDumpFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_WRITE | FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0); + if (INVALID_HANDLE_VALUE == hDumpFile) + { + FreeLibrary(hDbgHelp); + return EXCEPTION_CONTINUE_EXECUTION; + } + // 写入 dmp 文件 + MINIDUMP_EXCEPTION_INFORMATION expParam; + expParam.ThreadId = GetCurrentThreadId(); + expParam.ExceptionPointers = pExceptionPointers; + expParam.ClientPointers = FALSE; + pfnMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), + hDumpFile, MiniDumpWithDataSegs, (pExceptionPointers ? &expParam : NULL), NULL, NULL); + // 释放文件 + CloseHandle(hDumpFile); + FreeLibrary(hDbgHelp); + return EXCEPTION_EXECUTE_HANDLER; +} +inline LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo) +{ + if (IsDebuggerPresent()) + { + return EXCEPTION_CONTINUE_SEARCH; + } + return GenerateMiniDump(lpExceptionInfo); +} +#define INSTALL_DUMP_() SetUnhandledExceptionFilter(ExceptionFilter) #endif //PCH_H diff --git a/cvAutoTrack/src/version/version_tag.tag b/cvAutoTrack/src/version/version_tag.tag index 7dd72823..ed9b4522 100644 --- a/cvAutoTrack/src/version/version_tag.tag +++ b/cvAutoTrack/src/version/version_tag.tag @@ -1 +1 @@ -7.7.6 +7.7.11