Windows Kit 8.1标头无法确定WINVER和_WIN32_WINNT

时间:2019-04-19 10:58:12

标签: windows visual-studio winapi visual-c++ mfc

在我的应用程序解决方案中的一个项目中,出现编译错误:

  

... \ 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标头中,但是它们没有以某种方式将杂注消息放入控制台。我的想法不多了。怎么可能,我还能做什么?

我还尝试了手动编辑Windows Kit头文件以将WINVER重新定义为0x0601的愚蠢解决方案,但是其中有许多头文件,这只是一个快速完成工作的技巧。

0 个答案:

没有答案