我有一个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"。我该怎么做?
答案 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