#pragma once #include "GdCPP_Exports.h" #include "IpHelper.h" struct GDCPP_API sApp { // 当前执行文件的完整路径 fs::path ExeFullPath; // 当前执行exe所在目录 fs::path ExeDir; // Exe文件名,可以根据不同名称执行不同的内容 std::wstring wstrExeName; // 工作目录,是Log、Setting目录的主目录 // 初始化默认等于ExeDir。 // 如果exe所在目录是Debug或Release,ExeDir就上移一层,到x64 // 应用层可以另外指定工作目录 fs::path WorkDir; // 参数目录,默认为WorkDir下的Setting。应用层可以另外指定 fs::path SettingDir; // Log目录,默认为WorkDir下的Log。应用层可以另外指定 fs::path LogDir; // exe文件的版本 std::wstring exeFileVerStr; std::wstring exeProductVerStr; // exe的HINSTANCE HINSTANCE hInstance_Exe=0; CAdapterList NetAdapter; // @brief 跟具体应用关系不大的常规初始操作,与应用相关的放到init()。 // 初始化CTick,获取exe路径,设置工作目录、Log目录、Dump。在InitInstance()开头调用 // @return 是否有错。没错返回0;已知错误: virtual int preInit(); // 与应用相关的初始化,每个应用相差很大, // 继承类不需要调用sApp::init(),只是给个参考。 // 通常先调整工作目录,初始化Log,后面的操作都需要用到Log了 virtual int init(); virtual int deinit(); // 初始化gdi用到的变量, // 保存下来用于在deinit()里判断是否初始化过gdi ULONG_PTR m_gdiplusToken=0; // 初始化socket用到的变量, // 保存下来用于在deinit()里用判断是否初始化过socket WSADATA wsaData={0,0}; void initGDI(); bool initSocket(); virtual void RestartWindows(); virtual void ShutdownWindows(); };