Значение в файле .h не определено в файле .rc - PullRequest
2 голосов
/ 15 февраля 2012

Я работаю над созданием конфигураций сборки на основе моего предыдущего вопроса. У меня есть созданные конфигурации сборки, и у меня есть условные объявления для разных сборок в файле с именем 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 Ответ

3 голосов
/ 15 февраля 2012

Я нашел это. В Visual Studio необходимо устанавливать определения препроцессора для файлов ресурсов отдельно от проекта. Как только я добавил ELITE_BUILD в раздел препроцессора для ресурса, все заработало как положено.

...