/********************************************************************
函数名称 : GetExeDir
函数描述 : 获取可执行程序exe文件所在的目录
输入参数 : N/A
输出参数 : N/A
返回值 : 返回可执行程序exe文件所在的目录
备注 : N/A
*********************************************************************/
CString GetExeDir()
{
CString strExeDir;
WCHAR wszPath[MAX_PATH] = {0};
(void)GetModuleFileNameW(NULL, wszPath, _MAX_PATH);
WCHAR *lastslash = wcsrchr(wszPath, L'\\');
int len = (int)(lastslash - wszPath);
WCHAR wszTemp[MAX_PATH];
int i=0;
for (;i<len;i++)
{
wszTemp[i] = wszPath[i];
}
wszTemp[i] = '\0';
while (len > 0 && wszTemp[len-1] == L'\\')
{
len--;
}
strExeDir.Format(_TEXT("%s"),wszTemp);
return strExeDir;
}
//xxxapp.cpp文件
#include <DbgHelp.h>
#pragma comment(lib, "Dbghelp.lib")
LONG WINAPI ProcessException(struct _EXCEPTION_POINTERS* pExceptionInfo)
{
CString wsDumpFilePath = GetExeDir()+_T("\\DumpFile.dmp");
HANDLE hDumpFile = CreateFileW(wsDumpFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL ,NULL);
if (hDumpFile)
{
MINIDUMP_EXCEPTION_INFORMATION loExceptionInfo;
loExceptionInfo.ExceptionPointers = pExceptionInfo;
loExceptionInfo.ThreadId = GetCurrentThreadId();
loExceptionInfo.ClientPointers = TRUE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &loExceptionInfo, NULL, NULL);
CloseHandle(hDumpFile);
}
return EXCEPTION_CONTINUE_SEARCH;
}
CWinApp::InitInstance();
SetUnhandledExceptionFilter(ProcessException); // 用于自动产生程序异常跟踪定位文件(.dump)
AfxEnableControlContainer();