抛弃GdCpp*.dll/pdb历史重新建库。libhv和Sqlite的dll保留

This commit is contained in:
Zhang Jianjun
2026-02-02 16:09:02 +08:00
parent f148ca49e3
commit 4a2a284ac0
292 changed files with 350450 additions and 0 deletions

201
source/sApp.cpp Normal file
View File

@@ -0,0 +1,201 @@
#include "pch.h"
#include "sApp.h"
#include "CreateDump.h"
#include "Tools.h"
#include <gdiplus.h>
#include "aLog.h"
#include "CTic.h"
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")
int sApp::preInit()
{
CTic::Init();
TCHAR path[MAX_PATH + 1];
GetModuleFileName(NULL, path, MAX_PATH);
ExeFullPath = path; //完整路径
wstrExeName = ExeFullPath.stem().wstring(); //保存去掉扩展名的文件名
ExeDir = ExeFullPath.parent_path(); //exe所在路径
setCreateDump((ExeDir / wstrExeName).c_str(), MiniDumpWithIndirectlyReferencedMemory | MiniDumpWithDataSegs | MiniDumpWithHandleData | MiniDumpWithThreadInfo);
hInstance_Exe = GetModuleHandle(NULL);
GetFileVersion(path, exeFileVerStr);
// 如果版本号是以.0结尾,去掉
auto pos = exeFileVerStr.rfind(L".0");
if (pos != std::wstring::npos && pos == exeFileVerStr.size() - 2) {
exeFileVerStr.erase(pos);
}
GetProductVersion(path, exeProductVerStr);
pos = exeProductVerStr.rfind(L".0");
if (pos != std::wstring::npos && pos == exeProductVerStr.size() - 2) {
exeProductVerStr.erase(pos);
}
// 设置搜索dll的方式
SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
// 默认工作目录是exe所在目录
WorkDir = ExeDir;
// 如果在Debug/Release目录之下调试工作目录向上一级
auto pathname = ExeDir.filename().wstring();
if (pathname._Starts_with(L"Debug")
|| pathname._Starts_with(L"Release")
|| pathname._Starts_with(L"debug")
|| pathname._Starts_with(L"release")) {
WorkDir = ExeDir.parent_path();
fs::path solutionDir = WorkDir.parent_path();
}
return 0;
}
// 子类不用调用sApp::init(),这里只是打个样;
int sApp::init()
{
// 如果要更改WorkDir在这开头修改
SettingDir = WorkDir / L"Setting";
LogDir = WorkDir / L"Log";
if (!fs::exists(SettingDir)) {
fs::create_directories(SettingDir);
}
// Log目录不存在则创建
if (!fs::exists(LogDir)) {
fs::create_directories(LogDir);
}
initGDI();
initSocket();
return 0;
}
int sApp::deinit()
{
if(wsaData.wVersion) // 初始化过应该是0x0202
WSACleanup();
if(m_gdiplusToken)
GdiplusShutdown(m_gdiplusToken);
return 0;
}
void sApp::initGDI()
{
GdiplusStartupInput gdiplusStartupInput;
// Initialize GDI+.
GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
}
bool sApp::initSocket()
{
//第一个参数为WinSock版本号低字节为主版本号高字节为修正版本号第二个参数为WSADATA类型的指针 初始化成功返回0
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
alog->error("WSAStartup 失败");
//TRACE(_T("WSAStartup 失败!\n"));
return false;
}
return true;
}
void sApp::RestartWindows()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return;
// Get the LUID for the shutdown privilege.
if (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid)) {
CloseHandle(hToken);
return;
}
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0)) {
CloseHandle(hToken);
return;
}
if (GetLastError() != ERROR_SUCCESS) {
CloseHandle(hToken);
return;
}
// Shut down the system and force all applications to close.
if (!ExitWindowsEx(EWX_REBOOT | EWX_FORCE,
SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
SHTDN_REASON_MINOR_UPGRADE)) {
CloseHandle(hToken);
return;
}
//shutdown was successful
CloseHandle(hToken);
return;
}
void sApp::ShutdownWindows()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return;
// Get the LUID for the shutdown privilege.
if (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid)) {
CloseHandle(hToken);
return;
}
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0)) {
CloseHandle(hToken);
return;
}
if (GetLastError() != ERROR_SUCCESS) {
CloseHandle(hToken);
return;
}
// Shut down the system and force all applications to close.
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,
SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
SHTDN_REASON_MINOR_UPGRADE)) {
CloseHandle(hToken);
return;
}
//shutdown was successful
CloseHandle(hToken);
return;
}