【问题标题】:Visual Studio Resource compiler string mergingVisual Studio 资源编译器字符串合并
【发布时间】:2013-03-01 04:43:51
【问题描述】:

在我的项目中,我有一个包含文件“buildversion.h”,其中包含版本号的定义。 为了使它更易于管理,我做了一些预处理器“魔术”

问题是,Visual Studio 资源文件编辑器的行为不像普通的编译器,所以我得到“错误”的条目

我的头文件:

#define MAJOR_VER_NUM 2
#define MINOR_VER_NUM  3
#define REV_NUM     9999
#define STR(x)   #x        // helper defines
#define XSTR(x)  STR(x)  // helper defines
#define XXX_FILE_VERSION           MAJOR_VER_NUM,MINOR_VER_NUM,REV_NUM,0
#define XXX_PRODUCT_VERSION        MAJOR_VER_NUM,MINOR_VER_NUM,REV_NUM,0
#define XX_FILE_VERSION_STRING    XSTR(MAJOR_VER_NUM)", "XSTR(MINOR_VER_NUM)", "XSTR(REV_NUM)", 0"
#define ICOS_PRODUCT_VERSION_STRING XSTR(MAJOR_VER_NUM)", "XSTR(MINOR_VER_NUM)", "XSTR(REV_NUM)", 0"
int const MajorVersionNumber = MAJOR_VER_NUM;
int const MinorVersionNumber = MINOR_VER_NUM;
int const RevisionNumber     = REV_NUM;

在我的“main.rc”文件中,我包含上面的标头,并在我编写的版本块中

VALUE "FileVersion", XXX_FILE_VERSION_STRING

这个条目的结果是:

2"、"3"、"9999"、0

如果我在普通 c++ 代码中使用上述头文件,则替换工作正常,我得到 ​​p>

2、3、9999、0

正如预期的那样。

有没有办法在资源文件中完成这项工作?

【问题讨论】:

    标签: string visual-studio visual-c++ c-preprocessor


    【解决方案1】:

    这是适用于我的代码,已替换为使用与您的相同的宏名称。

    保持你的版本号和 str 助手不变,然后:

      #define XXX_FILE_VERSION_DOT MAJOR_VER_NUM.MINOR_VER_NUM.REV_NUM.0
      #define XXX_FILE_VERSION_COMMA MAJOR_VER_NUM,MINOR_VER_NUM,REV_NUM,0
    
      #define XXX_FILE_VERSION_DOT_STR XSTR(XXX_FILE_VERSION_DOT)
      #define XXX_FILE_VERSION_COMMA_STR XSTR(XXX_FILE_VERSION_COMMA)
    

    然后在 .rc 中,我发现您只需要在 FILEVERSION 部分使用 逗号形式,如下所示:

     FILEVERSION XXX_FILE_VERSION_COMMA
    

    稍后在StringFileInfo 块中,您使用点字符串形式 版本,如下所示:

     VALUE "FileVersion", XXX_FILE_VERSION_DOT_STR
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      相关资源
      最近更新 更多