c++builder - 编译时 Embarcadero C++ Builder 中的版本信息
问题描述
是否有可能在编译时获取项目版本信息(主要/次要/发布/构建)?像这样的东西?
#if MAJOR_VERSION=2
#include <fancyheader.h>
#else
#include <differentCoolStuff.h>
#endif
你的赫维格
解决方案
这是可以做到的。从 exe 文件中读取版本号可确保您读取的版本号(并可能基于它显示或更改 s/w 操作)与用户使用 Windows“属性”检查 exe 文件版本信息时看到的值相匹配检查,所以它很有意义。此代码适用于使用 C++ Builder 10.4(企业版 - 但它应该适用于任何版本)的 VCL 框架。
String ExeFileName = ParamStr(0);
unsigned long Handle;
int VersionInfoSize = GetFileVersionInfoSize(ExeFileName.c_str(), &Handle);
int VersionInfo[4];
void *FileInfo;
unsigned int Length;
//if size is zero, then there is no version info in the exe
if (VersionInfoSize > 0) {
char *Buffer = new char[VersionInfoSize];
try {
GetFileVersionInfo(ExeFileName.c_str(), 0, VersionInfoSize, Buffer);
VerQueryValue(Buffer, L"\\", &FileInfo, &Length);
TVSFixedFileInfo *Info = static_cast<TVSFixedFileInfo *>(FileInfo);
VersionInfo[0] = ((Info->dwFileVersionMS) >> 16);
VersionInfo[1] = ((Info->dwFileVersionMS) & 0xffff);
VersionInfo[2] = ((Info->dwFileVersionLS) >> 16);
VersionInfo[3] = ((Info->dwFileVersionLS) & 0xffff);
} catch (...) {
VersionInfo[0] = 99;
VersionInfo[1] = 88;
VersionInfo[2] = 77;
VersionInfo[3] = 66;
}
delete[] Buffer;
// DO WHAT YOU WANT WITH VersionInfo HERE !!!
}
推荐阅读
- bash - 使用 SCP 的语法是否发生了变化?在较新的服务器上出现意外的文件名错误
- c++ - 下面的代码输出 1 和 0 但是我不知道为什么
- javascript - 在 React 中显示图像文件夹
- sockets - WiFiP2PManager 连接 WiFiP2PConfig - 将端口号传递给客户端?
- c++ - SIMD C++ AVX2 Intrinsics 获取具有 16 位整数的 __m256i 向量的总和
- google-apps-script - 对 directory.members.insert 的 API 调用失败并出现错误:找不到资源:groupKey
- android - 使用 XML 中的背景属性不会更改按钮颜色
- html - 当用户输入 x 时,如何让 x 数量的输入框出现?
- python - How to add a row to every group with pandas groupby?
- python - Creating list from Pandas dataframe row while preserving data types