.h文件中的值未在.rc文件中定义

时间:2012-02-14 21:11:11

标签: visual-studio compiler-errors conditional-compilation rc

我正在根据我之前的一个问题创建构建配置。我已经创建了构建配置,并且我在名为custom.h的文件中对不同的构建进行了条件声明。它目前看起来像这样:

#pragma once

#if defined(ELITE_BUILD)
    #define BUILD 3 // 1: personal, 2: select, 3: elite
#elif defined(SELECT_BUILD)
    #define BUILD 2
#elif defined(PERSONAL_BUILD)
    #define BUILD 1
#endif

在我的一个.rc文件中有一个versionconfig.h的包含,看起来像这样(有点编辑):

#if BUILD == 1
#define STRDESCRIPTION  "Personal Edition"
#elif BUILD == 2
#define STRDESCRIPTION  "Select Edition"
#elif BUILD == 3
#define STRDESCRIPTION  "Elite Edition"
#pragma message(STRDESCRIPTION)
#endif

我添加了#pragma命令作为日志工作。在那之后,.rc文件的相关部分看起来像这样(为了简洁,再次进行了一些编辑):

BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "FileDescription", STRDESCRIPTION
        END
    END
END

当我尝试编译此项目时,我收到错误error RC2104 : undefined keyword or key name: STRDESCRIPTION。我有点失落。该值存在,我可以在设置后立即记录它,并且没有#undef命令。

- 已编辑 -

如果我在if块之外添加占位符定义项目将编译,但值没有显示,所以我的问题似乎与条件定义有关。在这一点上最令我困惑的是,我可以在条件块中放置一个#pragma message命令并且它已正确执行,但是那里定义的值不存在。希望有人可以为我阐明这一点。

1 个答案:

答案 0 :(得分:3)

我找到了。在Visual Studio中,您必须与项目分别设置资源文件的预处理器定义。只要我将ELITE_BUILD添加到资源的预处理器部分,一切都按预期工作。