Files
2026-03-03 13:56:44 +08:00

93 lines
2.2 KiB
C++

#include "Stdafx.h"
#include "GameServer.h"
#include "GameServerDlg.h"
#include <imagehlp.h>
#pragma comment(lib, "dbghelp.lib")
//////////////////////////////////////////////////////////////////////////////////
// 创建Dump文件
//
void CreateDumpFile(LPCSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException)
{
// 创建Dump文件;
//
HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// Dump信息;
//
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
// 写入Dump文件内容;
//
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
CloseHandle(hDumpFile);
}
// 处理Unhandled Exception的回调函数;
//
LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
char szModulePath[MAX_PATH] = {0};
::GetModuleFileName(NULL, szModulePath, MAX_PATH);
SYSTEMTIME st;
::GetLocalTime(&st);
char szFilePath[1024] = {0};
sprintf_s(szFilePath, 1024, "%s%02d%02d%02d%02d%02d.dmp", szModulePath, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
CreateDumpFile(szFilePath, pException);
return EXCEPTION_EXECUTE_HANDLER;
}
//////////////////////////////////////////////////////////////////////////////////
//程序对象
CGameServerApp theApp;
//////////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CGameServerApp, CWinApp)
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////////////////
//构造函数
CGameServerApp::CGameServerApp()
{
}
//启动函数
BOOL CGameServerApp::InitInstance()
{
// 设置处理Unhandled Exception的回调函数
//
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
__super::InitInstance();
//设置组件
AfxInitRichEdit2();
InitCommonControls();
AfxEnableControlContainer();
//设置注册表
SetRegistryKey(szProduct);
//显示窗口
CGameServerDlg GameServerDlg;
m_pMainWnd=&GameServerDlg;
GameServerDlg.DoModal();
return FALSE;
}
//////////////////////////////////////////////////////////////////////////////////