Visual Studio资源编译器字符串合并

时间:2013-03-13 10:02:23

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

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

问题是,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 ++代码中使用上面的头文件,那么替换工作正常,我得到了

  

2,3,9999,0

正如所料。

有没有办法在资源文件中使这个工作?

1 个答案:

答案 0 :(得分:2)

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

按原样保留您的版本号和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