0

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

我已按照本指南设置项目选项,但是当我尝试编译时收到此警告:

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

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

4

2 回答 2

2

这是因为在 GUID 上使用 ==/!= 可能不会产生正确的结果,因为 GUID 是一种重要的结构类型。

当编译为 C++ 时,guiddef.h使用此实现 ==/!=:IsEqualCLSID on MSDN

在您的情况下,问题在于 DDK 标头无法为 ==/!= GUID 实现 C++ 运算符重载。在我看来这会发生,因为guiddef.h在包含 DDK 标头之前已包含它。显然guiddef.h,DDK 不同意 ==/!= 运算符的实现方式,因此 DDK 发出警告。

所以我的猜测是,你真正需要做的就是重新审视包含订单。此外,我无法验证它,因为我手边没有 VS 2012,但很可能这个警告本身是唯一的“新”,并且程序的实际行为可能与 VS2008 没有变化。VS2008 很可能做了同样的事情,但没有发出警告来提醒程序员。在这种情况下,如果它在旧编译器中工作,那么它可能也应该在新编译器中工作。

于 2013-02-22T15:45:02.533 回答
0

从这里,该警告由以下方式给出:

#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_.

但是,除非您知道为什么要这样做,否则我不建议您这样做。也许您应该提供自己的重载?

于 2013-02-22T15:31:40.090 回答