C++ 资源文件 ProductVersion 显示变量名称而不是变量值

标签 c++ resources version

我正在尝试设置程序的版本控制,以便我可以在每次构建时增加它,但是在设置 .exe 的版本时遇到了一些问题。 .

这是我的 BuildVersion.h

#define STRINGIZE(s) #s

#define VER_MAJOR_VERSION   6
#define VER_MINOR_VERSION   7
#define VER_HOTFIX_VERSION  0
#define VER_BUILD_NUMBER    999

#define VER_FILE_VERSION    VER_MAJOR_VERSION, VER_MINOR_VERSION, VER_HOTFIX_VERSION, VER_BUILD_NUMBER
#define VER_FILE_VERSION_STR    STRINGIZE(VER_MAJOR_VERSION)    \
"." STRINGIZE(VER_MINOR_VERSION)    \
"." STRINGIZE(VER_HOTFIX_VERSION)   \
"." STRINGIZE(VER_BUILD_NUMBER) \

#define VER_PRODUCT_VERSION         VER_FILE_VERSION
#define VER_PRODUCT_VERSION_STR     VER_FILE_VERSION_STR

这是我的 .rc 的版本部分文件

/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION VER_FILE_VERSION
 PRODUCTVERSION VER_PRODUCT_VERSION
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x0L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", "My Company"
            VALUE "FileDescription", "My Description"
            VALUE "FileVersion", VER_FILE_VERSION_STR "\0"
            VALUE "InternalName", "MyProgram.exe"
            VALUE "LegalCopyright", "© 2019 My copyright"
            VALUE "OriginalFilename", "MyProgram.exe"
            VALUE "ProductName", "My Program"
            VALUE "ProductVersion", VER_PRODUCT_VERSION_STR "\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

但这就是我的 .exe 中显示的内容属性

Properties

如您所见,产品版本显示 VER_MAJOR_VERSION.VER_MINOR_VERSION.VER_HOTFIX_VERSION.VER_BUILD_NUMBER ,而不是像文件版本这样的预期整数。它使用变量名称而不是变量值。

我尝试过设置 PRODUCTVERSION"ProductVersion"使用VER_FILE_VERSIONVER_FILE_VERSION_STR ,分别代替自己单独的PRODUCT_VERSION变量,但同样的事情发生。

使用 Visual Studio 2017、Windows SDK 10.0.15063.0

最佳答案

您不是对宏的进行字符串化,而是对宏的名称进行字符串化。您需要额外的处理级别,以便在对结果进行字符串化之前评估宏,例如:

#define STRINGIZE_(s) #s
#define STRINGIZE(s) STRINGIZE_(s)

关于C++ 资源文件 ProductVersion 显示变量名称而不是变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59571329/

相关文章:

version - 在 "SemVer.org"中,第 7 项中的 "It MAY include patch level changes"是什么意思?

c++ - qdbusxml2cpp 未知类型

c++ - 在 C++11 中迭代容器的推荐方法是什么?

java - 编译时音频剪辑不播放

jsf-2 - background-image: url ("") 在 CSS h:outputStylesheet 没有加载

unix - 我可以决定在 LSF 队列中分配多少内存吗

c# - WP8 获取应用信息

c++ - MPI 中每个进程的随机数

c++ - 从位集中获取某些位的十进制值的快速方法

security - list 中的 Visual Studio 2005 安全更新和 CRT DLL 版本