Visual Studio编译警告:使用系统操作符== /!=用于GUID

时间:2013-02-22 15:24:52

标签: c++ windows visual-studio-2012 driver

我正在尝试将Windows驱动程序项目从使用DDK构建系统和Makefile转换为可以在Visual Studio 2012中编译的项目。

我已经按照this guide设置了项目选项,但是当我尝试编译时,我收到了这个警告:

warning : Using system operator==/!= for GUIDs

我想我可以设置一个项目配置标志来解决这个问题。任何帮助表示赞赏。

2 个答案:

答案 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_的编译器选项。

但是,除非您知道为什么,否则我不建议您做某事。也许你应该提供自己的超载?