2

Я работаю над созданием конфигураций сборки, основанных на предыдущем вопросе. У меня есть созданные конфигурации сборки, и у меня есть условные объявления для разных сборок в файле с именем custom.h. В настоящее время она выглядит следующим образом:Значение в файле .h, не определенном в .rc файле

#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.

- EDITED -

Если добавить заполнитель определяет снаружи из, если блокировать проект компилируется, но значения не отображаются, поэтому моя проблема, как представляется, связаны с условными определениями. Что меня больше сбивает с толку, так это то, что я могу поместить команду #pragma message внутри условного блока, и она выполнена правильно, но значения, определенные там, несуществуют. Надеюсь, кто-то может пролить свет на это для меня.

+0

Обычно я подозреваю опечатку. – Joshua

+0

Если я недавно создал файлы, которые могут быть возможны. Однако соответствующие части файлов не изменились за довольно долгое время. Единственными измененными файлами были 'custom.h', и это должно было быть проверено на переменные, определенные в разделе Preprocessor в конфигурациях сборки. 'versionconfig.h' и файл' .rc' не были изменены. –

ответ

3

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

Смежные вопросы