我正在尝试将 Windows 驱动程序项目从使用 DDK 构建系统和 Makefile 转换为可以从 Visual Studio 2012 中编译的项目。
我已按照本指南设置项目选项,但是当我尝试编译时收到此警告:
warning : Using system operator==/!= for GUIDs
我想我可以设置一个项目配置标志来解决这个问题。任何帮助表示赞赏。
我正在尝试将 Windows 驱动程序项目从使用 DDK 构建系统和 Makefile 转换为可以从 Visual Studio 2012 中编译的项目。
我已按照本指南设置项目选项,但是当我尝试编译时收到此警告:
warning : Using system operator==/!= for GUIDs
我想我可以设置一个项目配置标志来解决这个问题。任何帮助表示赞赏。
这是因为在 GUID 上使用 ==/!= 可能不会产生正确的结果,因为 GUID 是一种重要的结构类型。
当编译为 C++ 时,guiddef.h
使用此实现 ==/!=:IsEqualCLSID on MSDN
在您的情况下,问题在于 DDK 标头无法为 ==/!= GUID 实现 C++ 运算符重载。在我看来这会发生,因为guiddef.h
在包含 DDK 标头之前已包含它。显然guiddef.h
,DDK 不同意 ==/!= 运算符的实现方式,因此 DDK 发出警告。
所以我的猜测是,你真正需要做的就是重新审视包含订单。此外,我无法验证它,因为我手边没有 VS 2012,但很可能这个警告本身是唯一的“新”,并且程序的实际行为可能与 VS2008 没有变化。VS2008 很可能做了同样的事情,但没有发出警告来提醒程序员。在这种情况下,如果它在旧编译器中工作,那么它可能也应该在新编译器中工作。
从这里,该警告由以下方式给出:
#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_
.
但是,除非您知道为什么要这样做,否则我不建议您这样做。也许您应该提供自己的重载?