Установка текста метки из других заголовочных файлов в файле Visual C ++ 2010 .rc - PullRequest
0 голосов
/ 05 марта 2012

Предположим, у вас есть метка в устаревшем проекте 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 Ответ

1 голос
/ 05 марта 2012

Я не думаю, что вы сможете достичь того, что вы хотите, без кода C ++. См. Комментарий к этой статье MSDN e:

Не используйте парены в #define Компилятор ресурсов очень ограничен в понимании директив . Так, например, это:

#define RESTYPE_FILE     (256)

будет молча игнорироваться, а вот это:

#define RESTYPE_FILE    256

будет работать. Очевидно, что попытка использовать выражения или что-либо подобное может молча провалиться, и вы задаетесь вопросом, почему вы не можете загрузить этот ресурс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...