如何解决编译时 Embarcadero C++ Builder 中的版本信息
是否可以在编译时以某种方式获取项目版本信息(主要/次要/发布/构建)?像这样吗?
#if MAJOR_VERSION=2
#include <fancyheader.h>
#else
#include <differentCoolStuff.h>
#endif
你的 赫维格
解决方法
这是可以做到的。从 exe 文件中读取版本号可确保您读取的版本号(并且可能基于它显示或更改软件操作)与用户在使用 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(),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 !!!
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。