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



假设您在遗留的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++代码,但这对我来说似乎很不雅

那么,有更好的方法吗?

我认为如果没有C++代码,你将无法实现你想要的。请参阅这篇msdn文章的评论:

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

#define RESTYPE_FILE     (256)

将被忽略,而这个:

#define RESTYPE_FILE    256

将起作用。显然,尝试使用表达式或类似的任何复杂的东西都会默默地失败,让您想知道为什么不能加载该资源。

相关内容

最新更新