2014-10-27 1 views
0

У меня есть файл RC с этими Определяет внутри:Как преобразовать конкатенированные определяет в строку в файле RC?

#define V_MAJOR 0 
#define V_MINOR 0 
#define V_PATCH 0 
#define V_BUILD 2 
#define DOT . 

#define V_STRING V_MAJOR##DOT##V_MINOR##DOT##V_PATCH##DOT##V_BUILD 

Как повернуть V_STRING в символьной строки?

Я попытался следующий код (который я нашел в Интернете и якобы работает)

#define STRINGIZE_(x) #x 
#define STRINGIZE(x) STRINGIZE_(x) 

, а затем я назвал STRINGIZE на V_STRING, но вместо того, чтобы превратить значения в строки, оказалось идентификаторы в строки , (АКА отображает «V_MAJORDOTV_MINORDOTV_PATCHDOTV_BUILD» на вкладке свойств в проводнике для версии продукта.)

Я в принципе хочу V_STRING вернуть «0.0.0.2», используя V_MAJOR, V_MINOR, V_PATCH и V_BUILD. Как мне это сделать?

ответ

1

Во-первых, переопределите свои номера версий, как указано ниже.

#define V_MAJOR "0" 
#define V_MINOR "0" 
#define V_PATCH "0" 
#define V_BUILD "2" 
#define DOT "." 

Обратите внимание, что номера версий находятся внутри двойных кавычек.

Затем переопределите VS_STRING, как показано ниже.

#define V_STRING V_MAJOR DOT V_MINOR DOT V_PATCH DOT V_BUILD 

Обратите внимание, что используется оператор точечной пачки NO.

Теперь вы можете использовать макрос VS_STRING внутри RC-файла, как указано ниже.

// Other stuffs 
VALUE "FileVersion", V_STRING 
// Other stuffs 

Также вы можете использовать макрос VS_STRING в коде, как показано ниже.

char* ptszVersion = V_STRING; 
    printf("Version number is %s", ptszVersion); 

См. Ниже выход.

номер версии 0.0.0.2

+0

Спасибо, хотя в настоящее время на вкладке свойств в проводнике, то «Версия файла» установлено значение 0.0.0.0, а «Версии» получает правильный номер. Вы знаете, почему это происходит? – BananasGoMoo

+1

я понял это: '#define STRINGIZE_ (х) #x #define STRINGIZE (х) STRINGIZE_ (х) #define V_MAJOR 0 #define V_MINOR 0 #define V_PATCH 0 #define V_BUILD 2 #define DOT "." #define S_MAJOR STRINGIZE (V_MAJOR) #define S_MINOR STRINGIZE (V_MINOR) #define S_PATCH STRINGIZE (V_PATCH) #define S_BUILD STRINGIZE (V_BUILD) #define V_STRING S_MAJOR ДОТ S_MINOR ДОТ ДОТ S_PATCH S_BUILD' , потому что, по-видимому «Версия файла» взята из оператора FILEVERSION, для которого требуются целые числа, а «Версия продукта» взята из VALUE «ProductVersion» - строки. – BananasGoMoo

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