在我的应用程序解决方案中的一个项目中,出现编译错误:
... \ 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的愚蠢解决方案,但是其中有许多头文件,这只是一个快速完成工作的技巧。