80 lines
2.5 KiB
C++
80 lines
2.5 KiB
C++
|
// FlightController.cpp: 定义应用程序的入口点。
|
|||
|
//
|
|||
|
|
|||
|
#include <QApplication>
|
|||
|
#include <QFile>
|
|||
|
#include <QDir>
|
|||
|
#include <QFontDatabase>
|
|||
|
#include <QMessageBox>
|
|||
|
#include "MainWindow.h"
|
|||
|
|
|||
|
#include "VlcMediaPlayer.h"
|
|||
|
#include "SpdLog.h"
|
|||
|
#include "CrashHandler.h"
|
|||
|
|
|||
|
#include <Windows.h>
|
|||
|
#include <DbgHelp.h>
|
|||
|
#pragma comment(lib, "DbgHelp.lib")
|
|||
|
|
|||
|
using namespace std;
|
|||
|
|
|||
|
LONG CreateCrashHandler(EXCEPTION_POINTERS* pException) {
|
|||
|
QString cur = QDateTime::currentDateTime().toString("yyyy_MM_dd_hh_mm_mm_ss");
|
|||
|
QString dumpFileName = qApp->applicationName() + "_Dump_" + cur + ".dump";
|
|||
|
EXCEPTION_RECORD* record = pException->ExceptionRecord;
|
|||
|
QString errCode = QString::number(record->ExceptionCode, 16);
|
|||
|
QString errAddr = QString::number((uint)record->ExceptionAddress, 16);
|
|||
|
QString errFlag = QString::number((uint)record->ExceptionFlags, 16);
|
|||
|
QString errPara = QString::number(record->NumberParameters, 16);
|
|||
|
HANDLE dumpHandle = CreateFile((LPCWSTR)dumpFileName.utf16(), GENERIC_WRITE,
|
|||
|
0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
|||
|
if (dumpHandle != INVALID_HANDLE_VALUE) {
|
|||
|
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
|
|||
|
dumpInfo.ExceptionPointers = pException;
|
|||
|
dumpInfo.ThreadId = GetCurrentThreadId();
|
|||
|
dumpInfo.ClientPointers = TRUE;
|
|||
|
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), dumpHandle,
|
|||
|
MiniDumpNormal, &dumpInfo, NULL, NULL);
|
|||
|
CloseHandle(dumpHandle);
|
|||
|
}
|
|||
|
|
|||
|
QMessageBox::warning(nullptr, "dump", QString("ErrorCode%1 ErrorAddr:%2 ErrorFlag:%3 ErrorPara:%4").arg(errCode)
|
|||
|
.arg(errAddr).arg(errFlag).arg(errPara), QMessageBox::Ok);
|
|||
|
return EXCEPTION_EXECUTE_HANDLER;
|
|||
|
}
|
|||
|
|
|||
|
int main(int argc, char* argv[]) {
|
|||
|
//#ifdef Q_OS_WIN
|
|||
|
// SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CreateCrashHandler);
|
|||
|
//#endif
|
|||
|
|
|||
|
QApplication app(argc, argv);
|
|||
|
InstallCrashHandler();
|
|||
|
InitSpdlog("ProjectorDisplay_log", "logs/ProjectorDisplay_log.txt", 5);
|
|||
|
|
|||
|
int fontId = QFontDatabase::addApplicationFont(QApplication::applicationDirPath() + "/ProjectDisplay/font/font.ttf");
|
|||
|
QStringList fontFamilies = QFontDatabase::applicationFontFamilies(fontId);
|
|||
|
|
|||
|
if (fontFamilies.size() <= 0) {
|
|||
|
qDebug() << "load font failed:" ;
|
|||
|
UninitSpdlog();
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
VlcMediaPlayer::Init();
|
|||
|
|
|||
|
MainWindow mainWindow(fontFamilies);
|
|||
|
|
|||
|
mainWindow.show();
|
|||
|
|
|||
|
mainWindow.Adjust();
|
|||
|
|
|||
|
int ret = app.exec();
|
|||
|
|
|||
|
VlcMediaPlayer::Uninit();
|
|||
|
|
|||
|
UninitSpdlog();
|
|||
|
|
|||
|
return ret;
|
|||
|
}
|