在Visual C ++ 2010 .rc文件中设置其他头文件的标签文本

时间:2012-03-05 10:15:26

标签: visual-studio-2010 visual-c++ mfc

假设您在旧版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 ++代码,但这对我来说似乎非常不优雅。

那么,有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我认为如果没有C ++代码,你将无法获得你想要的东西。查看评论this msdn articl e:

不要在#define中使用parens 资源编译器对指令的理解非常有限。所以,例如,这个:

#define RESTYPE_FILE     (256)

会默默地被忽略,而这个:

#define RESTYPE_FILE    256

会奏效。显然,尝试使用表达式或任何复杂的表达方式都会无声地失败,让您想知道为什么无法加载该资源。