我正在尝试将Windows驱动程序项目从使用DDK构建系统和Makefile转换为可以在Visual Studio 2012中编译的项目。
我已经按照this guide设置了项目选项,但是当我尝试编译时,我收到了这个警告:
warning : Using system operator==/!= for GUIDs
我想我可以设置一个项目配置标志来解决这个问题。任何帮助表示赞赏。
答案 0 :(得分:2)
这是因为在GUID上使用== /!=可能无法产生正确的结果,因为GUID是一种非平凡的结构类型。
当编译为C ++时,guiddef.h
使用以下方法实现== /!=:IsEqualCLSID on MSDN
在您的情况下,问题是DDK标头无法实现== /!= GUID的C ++运算符重载。在我看来,这会发生,因为在包含DDK标头之前包含guiddef.h
。显然guiddef.h
和DDK不同意如何实现== /!=运算符,因此DDK会发出警告。
所以我的猜测是你真正需要做的就是重新审视包含顺序。此外,我无法验证它,因为我没有VS 2012方便,但很可能这个警告本身是唯一的'新',并且程序的实际行为可能与VS2008保持不变。 VS2008很可能做了同样的事情,但未能发出警告来提醒程序员。在这种情况下,如果它在旧编译器中工作,那么它也可能在新的编译器中工作。
答案 1 :(得分:0)
From here,该警告由以下人员发出:
#if defined(_SYS_GUID_OPERATOR_EQ_)
#define _GUID_OPERATORS_
#pragma message("WARNING: Using system operator==/!= for GUIDs")
#endif
看起来可以通过定义_NO_SYS_GUID_OPERATOR_EQ_
来禁用它。因此,请尝试/D_NO_SYS_GUID_OPERATOR_EQ_
的编译器选项。
但是,除非您知道为什么,否则我不建议您做某事。也许你应该提供自己的超载?