Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将连接的定义转换为RC文件中的字符串?_C++ - Fatal编程技术网

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

C++ 如何将连接的定义转换为RC文件中的字符串?,c++,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_字符串转换为文字字符串 我尝试了下面的代码(我在互联网上找到的,据说是有效的) 然后我在V_STRING上调用了STRINGIZE,但它没有将值转

我有一个包含以下定义的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_字符串转换为文字字符串

我尝试了下面的代码(我在互联网上找到的,据说是有效的)

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


我基本上希望V_字符串返回“0.0.0.2”,使用V_MAJOR、V_MINOR、V_PATCH和V_BUILD。如何做到这一点?

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

#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
// Other stuffs
VALUE "FileVersion", V_STRING
// Other stuffs
    char* ptszVersion = V_STRING;
    printf( "Version number is %s", ptszVersion );
请注意,版本号在双引号内

然后重新定义VS_字符串,如下所示

#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
// Other stuffs
VALUE "FileVersion", V_STRING
// Other stuffs
    char* ptszVersion = V_STRING;
    printf( "Version number is %s", ptszVersion );
请注意,未使用令牌粘贴运算符

现在,您可以在RC文件中使用VS_字符串宏,如下所示

#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
// Other stuffs
VALUE "FileVersion", V_STRING
// Other stuffs
    char* ptszVersion = V_STRING;
    printf( "Version number is %s", ptszVersion );
此外,您还可以在下面给出的代码中使用VS_字符串宏

#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
// Other stuffs
VALUE "FileVersion", V_STRING
// Other stuffs
    char* ptszVersion = V_STRING;
    printf( "Version number is %s", ptszVersion );
请参阅下面的输出


版本号为0.0.0.2

谢谢,不过现在在资源管理器的“属性”选项卡上,“文件版本”设置为0.0.0.0,而“产品版本”则获得了正确的版本号。你知道为什么会发生这种情况吗?我想出来了:
#定义字符串化(x)#定义字符串化(x)字符串化(x)#定义V#大0#定义V#小0#定义V#小补丁0#定义V#构建2#定义点###定义S#大字符串化(V#大#定义S#小字符串化#定义补丁#(V_PATCH)#定义S_BUILD STRINGIZE(V_BUILD)#定义V_STRING S_MAJOR DOT S_MINOR DOT S S_PATCH DOT S_BUILD
,因为显然“文件版本”取自需要整数的FILEVERSION语句,“产品版本”取自字符串“ProductVersion”值。