假设您在旧版Visual C ++ 2010项目中有一个标签,定义如下:
[foo.rc]
LTEXT "Foo",IDC_STATIC,42,42,42,42
在资源(.rc)文件中。
现在,您希望根据在头文件中定义的常量生成文本,如下所示:
[foo.rc]
LTEXT FOO_TEXT,IDC_STATIC,42,42,42,42
前面以其他方式定义了FOO_TEXT,例如:
[bar.h]
#define FROBNICATE "F"
#define OO "o"
#define ICANTTHINKOFMETASYNTACTICVARIABLESBEGINNINGWITHO "o"
#define FOO_TEXT (FROBNICATE OO ICANTTHINKOFMETASYNTACTICVARIABLESBEGINNINGWITHO)
只有那个不起作用,因为.rc文件不是头文件,RC编译器抱怨,告诉你:
[Build output]
1>foo.rc(42): error RC2116: expecting number for ID
1>
1>
1>foo.rc(42): error RC2108: expected numerical dialog constant
你会做什么?
澄清一下,是的,整个字符串在编译时是已知的,但它也需要从较小的字符串构造(在这种情况下,版本信息和发布类别(开发,发布和另一个)) 。当然,我也可以编写那样做的C ++代码,但这对我来说似乎非常不优雅。
那么,有更好的方法吗?
答案 0 :(得分:1)
我认为如果没有C ++代码,你将无法获得你想要的东西。查看评论this msdn articl e:
不要在#define中使用parens 资源编译器对指令的理解非常有限。所以,例如,这个:
#define RESTYPE_FILE (256)
会默默地被忽略,而这个:
#define RESTYPE_FILE 256
会奏效。显然,尝试使用表达式或任何复杂的表达方式都会无声地失败,让您想知道为什么无法加载该资源。