#include "DiosGeneralDefine_V3.h" //获取当前路径 string GetProcessDirectory() { string ret = ""; char szFilename[MAX_PATH] = { 0 }; DWORD res = GetModuleFileNameA(0, szFilename, MAX_PATH); if (res == 0) { return ret; } string fullpath = szFilename; string::size_type firstHit = fullpath.find_last_of('\\'); if (firstHit == string::npos || firstHit == 0) { return ret; } ret = fullpath.substr(0, firstHit);//kick last \ return ret; } //获取配置文件中指定模块的版本号 bool GetVersion(string& version, HMODULE hMyModule) { try { char filename[MAX_PATH + 1] = { 0 }; if (GetModuleFileName(hMyModule, filename, MAX_PATH) == 0) { //mLog::Error("dll HMODULEis null\n"); return false; } printf("get Generator path:{$}\n", filename); //mLog::Info("get Generator path:{$}\n", filename); DWORD dummy; DWORD size = GetFileVersionInfoSize(filename, &dummy); if (size == 0) { return false; } auto data = make_unique(size); if (!GetFileVersionInfo(filename, 0, size, &data[0])) { return false; } UINT32 len = 0; VS_FIXEDFILEINFO* fixed_file_info = 0; if (!VerQueryValue(&data[0], TEXT("\\"), reinterpret_cast(&fixed_file_info), &len)) { return false; } // version 为版本号 UINT32 vBitNumber = 0; vBitNumber = HIWORD(fixed_file_info->dwProductVersionMS); version += to_string(vBitNumber); version += "."; vBitNumber = LOWORD(fixed_file_info->dwProductVersionMS); version += to_string(vBitNumber); version += "."; vBitNumber = HIWORD(fixed_file_info->dwProductVersionLS); version += to_string(vBitNumber); version += "."; vBitNumber = LOWORD(fixed_file_info->dwProductVersionLS); version += to_string(vBitNumber); return true; } catch (...) { printf("get Generator Mould version failed"); //mLog::Error("get Generator Mould version failed\n"); } return false; } bool GetVersion(string& version, ResDataObject& config) { try { string procdir = ""; char filename[MAX_PATH + 1] = { 0 }; procdir = GetProcessDirectory(); if (procdir.empty()) { if (GetModuleFileName(nullptr, filename, MAX_PATH) == 0) { return false; } } else { string oemdrvpath = (const char*)config["oemdriver"]; { string keystr = "%ROOT%"; string::size_type pos = 0; string::size_type keylen = keystr.size(); string::size_type replen = procdir.size(); while ((pos = oemdrvpath.find(keystr, pos)) != string::npos) { oemdrvpath.replace(pos, keylen, procdir); pos += replen; } } strncpy_s(filename, oemdrvpath.c_str(), MAX_PATH); } printf("get Generator path:{$}\n", filename); //mLog::Info("get Generator path:{$}\n", filename); DWORD dummy; DWORD size = GetFileVersionInfoSize(filename, &dummy); if (size == 0) { return false; } auto data = make_unique(size); if (!GetFileVersionInfo(filename, 0, size, &data[0])) { return false; } UINT32 len = 0; VS_FIXEDFILEINFO* fixed_file_info = 0; if (!VerQueryValue(&data[0], TEXT("\\"), reinterpret_cast(&fixed_file_info), &len)) { return false; } // version 为版本号 UINT32 vBitNumber = 0; vBitNumber = HIWORD(fixed_file_info->dwProductVersionMS); version += to_string(vBitNumber); version += "."; vBitNumber = LOWORD(fixed_file_info->dwProductVersionMS); version += to_string(vBitNumber); version += "."; vBitNumber = HIWORD(fixed_file_info->dwProductVersionLS); version += to_string(vBitNumber); version += "."; vBitNumber = LOWORD(fixed_file_info->dwProductVersionLS); version += to_string(vBitNumber); return true; } catch (...) { printf("get Generator Mould version failed"); //mLog::Error("get Generator Mould version failed\n"); } return false; } bool GetVersion(string& version) { try { char filename[MAX_PATH + 1] = { 0 }; if (GetModuleFileName(nullptr, filename, MAX_PATH) == 0) { return false; } printf("get Generator path:{$}\n", filename); //mLog::Info("get Generator path:{$}\n", filename); DWORD dummy; DWORD size = GetFileVersionInfoSize(filename, &dummy); if (size == 0) { return false; } auto data = make_unique(size); if (!GetFileVersionInfo(filename, 0, size, &data[0])) { return false; } UINT32 len = 0; VS_FIXEDFILEINFO* fixed_file_info = 0; if (!VerQueryValue(&data[0], TEXT("\\"), reinterpret_cast(&fixed_file_info), &len)) { return false; } // version 为版本号 UINT32 vBitNumber = 0; vBitNumber = HIWORD(fixed_file_info->dwProductVersionMS); version += to_string(vBitNumber); version += "."; vBitNumber = LOWORD(fixed_file_info->dwProductVersionMS); version += to_string(vBitNumber); version += "."; vBitNumber = HIWORD(fixed_file_info->dwProductVersionLS); version += to_string(vBitNumber); version += "."; vBitNumber = LOWORD(fixed_file_info->dwProductVersionLS); version += to_string(vBitNumber); return true; } catch (...) { printf("get Generator Mould version failed"); //mLog::Error("get Generator Mould version failed\n"); } return false; } //以指定分隔符截断字符串 void StrSubstrData(const char* strData, char delimiter, std::vector& array) { string strtemp = strData; string strItem = strtemp; // cout << "origin:" << strtemp << endl; std::size_t oldPos = 0; std::size_t findPos = strtemp.find(delimiter); while (findPos != string::npos) { strItem = strtemp.substr(oldPos, findPos - oldPos); array.push_back(strItem); if (findPos != strtemp.length()) { oldPos = findPos + 1; findPos = strtemp.find(",", oldPos); if (findPos == string::npos) { strItem = strtemp.substr(oldPos, strtemp.length() - oldPos); break; } } else { break; } } array.push_back(strItem); } void StrSubstrData(const char* strData, char delimiter,std::list &array) { string strtemp = strData; string strItem = strtemp; bool lastFlag = false; std::size_t oldPos = 0; while (!strItem.empty()) { std::size_t findPos = strtemp.find(delimiter, oldPos); if (findPos != string::npos) { strItem = strtemp.substr(oldPos, findPos - oldPos); } else { strItem = strtemp.substr(oldPos, strtemp.length() - oldPos); lastFlag = true; } array.push_back(strItem); if (lastFlag) { break; } else { oldPos = findPos + 1; } } }