Заголовки Windows Kit 8.1 имеют проблемы с определением WINVER и _WIN32_WINNT - PullRequest
0 голосов
/ 19 апреля 2019

В одном из проектов моего приложения я получаю сообщение об ошибке компиляции:

... \ Program Files (x86) \ Windows Kits \ 8.1 \ Include \ um \ dlgs.h (245): фатальная ошибка RC1017: недопустимое целочисленное константное выражение

Точно, это код, вызывающий проблему:

#if (WINVER >= 0x400) //this line
#define PAGESETUPDLGORD         1546
#define NEWFILEOPENORD          1547
#define PRINTDLGEXORD           1549
#define PAGESETUPDLGORDMOTIF    1550
#define COLORMGMTDLGORD         1551
#define NEWFILEOPENV2ORD        1552
#endif /* WINVER >= 0x400) */

Что кажется странным, потому что в указанных настройках проекта я установил определения препроцессора C / C ++:

WINVER=0x0601;_WIN32_WINNT=0x0601

Где 0x0601 - это значение, соответствующее Windows 7, то есть ОС, которую я использую.

Я добавил этот макрос проверки работоспособности в StdAfx.h, чтобы определить, правильно ли препроцессор видит эти значения:

#define XSTR(x) STR(x)
#define STR(x) #x

#pragma message("WINVER equals:") 
#pragma message(XSTR(WINVER))
#pragma message("WIN32_WINNT equals:")
#pragma message(XSTR(_WIN32_WINNT))

И во время сборки я получаю правильные значения:

1>StdAfx.cpp  
1>WINVER equals:  
1>0x0601  
1>WIN32_WINNT equals:  
1>0x0601  

Обратите внимание, что эта ошибка возникает после того, как cl.exe распечатывает ее на консоли:

1> Генерация кода ...

Из моего исследования кажется, что препроцессор WINVER определен без значения, например:

#define WINVER

Я попытался добавить тот же макрос в заголовки Windows, но они не помещают сообщение pragma в консоль. У меня заканчиваются идеи. Как это может быть, что еще я могу сделать?

Я также попробовал глупое решение вручную отредактировать заголовки набора Windows, чтобы переопределить WINVER на 0x0601, но таких заголовков много, и это всего лишь хак, чтобы быстро выполнить работу.

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