SetUnhandledExceptionFilter(ExceptionFilter);
exceptionfilter中想得到发生异常的是哪个模块, 并得到它的基址,程序有可能有好多个自己的dll:
下面的exceptionfilter函数写得对吗?主要在dll中发生的错误,不知道
GetModuleFileName得到的模块名字是不是对的
LONG WINAPI ExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
TCHAR modulename[MAX_PATH],szError[1000],filename[MAX_PATH],temp[MAX_PATH],*p;
MODULEINFO moduleinfo;
DWORD processID = GetCurrentProcessId();
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE, processID );
GetModuleFileName(NULL,filename,MAX_PATH);
p=strrchr(filename,'\\');
p++;
lstrcpy(temp,p);
HMODULE hmodule=GetModuleHandle(temp);
if(GetModuleInformation(hProcess,hmodule,&moduleinfo,sizeof(MODULEINFO)))
wsprintf(szError,"本程序遇到错误需要关闭,对此给你带来的不便表示抱歉.\n模块:%s,模块基址:0x%x,异常代码:0x%x,指令地址:0x%x",
temp,moduleinfo.lpBaseOfDll,pExceptionInfo->ExceptionRecord->ExceptionCode,pExceptionInfo->ExceptionRecord->ExceptionAddress);
else
lstrcpy(szError,"本程序遇到错误需要关闭,对此给你带来的不便表示抱歉.");
MessageBox(NULL,szError,"seh",MB_OK);
return EXCEPTION_EXECUTE_HANDLER;
}
各位高手请看下.
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!