如何将连接的定义转换为RC文件中的字符串?

时间:2014-10-27 02:39:50

标签: c++

我有一个RC文件,里面有这些定义:

#define V_MAJOR 0
#define V_MINOR 0
#define V_PATCH 0
#define V_BUILD 2
#define DOT .

#define V_STRING V_MAJOR##DOT##V_MINOR##DOT##V_PATCH##DOT##V_BUILD

如何将V_STRING转换为文字字符串?

我尝试了以下代码(我在互联网上发现并且据说可行)

#define STRINGIZE_(x) #x
#define STRINGIZE(x) STRINGIZE_(x)

然后我在V_STRING上调用STRINGIZE,但不是将值转换为字符串,而是将标识符转换为字符串。 (AKA它在产品版本的资源管理器的属性选项卡中显示" V_MAJORDOTV_MINORDOTV_PATCHDOTV_BUILD")

我基本上希望V_STRING使用V_MAJOR,V_MINOR,V_PATCH和V_BUILD返回" 0.0.0.2"。我该怎么做?

1 个答案:

答案 0 :(得分:1)

首先,重新定义您的版本号,如下所示。

#define V_MAJOR "0"
#define V_MINOR "0"
#define V_PATCH "0"
#define V_BUILD "2"
#define DOT "."

请注意版本号在双引号内。

然后重新定义VS_STRING,如下所示。

    #define V_STRING V_MAJOR DOT V_MINOR DOT V_PATCH DOT V_BUILD

请注意,未使用任何令牌粘贴运算符。

现在您可以在RC文件中使用VS_STRING宏,如下所示。

// Other stuffs
VALUE "FileVersion", V_STRING
// Other stuffs

此外,您可以在代码中使用VS_STRING宏,如下所示。

    char* ptszVersion = V_STRING;
    printf( "Version number is %s", ptszVersion );

见下面的输出。

版本号为0.0.0.2