gpt4 book ai didi

c++ - #define 变量被忽略并在 windows.h 中重新定义

转载 作者:可可西里 更新时间:2023-11-01 10:00:23 25 4
gpt4 key购买 nike

我使用的是 Windows 7 计算机,因此我定义了 WINVER 和 _WIN32_WINNT 来反射(reflect)这一点。但是,当包含 windows.h 时,它看不到原始的 #define 并将值重新定义为默认值 0x0400。我的代码如下。这是在带有 mingw g++ 的 QT Creator 中的 Windows 7 PC 上。关于为什么会发生这种情况的任何想法?

#define WINVER 0x0601
#define _WIN32_WINNT 0x0601

#if WINVER > 0x0600
#define GOOD
#endif

#include <windows.h>

#if WINVER > 0x0600
#define STILL_GOOD
#endif

#include <winuser.h>
#include <initguid.h>
#include <dbt.h>

编辑:我使用 #if WINVER > 0x0600... 语句来确定值是什么。

最佳答案

定义这些常量的正确方法是在您的项目中,而不是在您的源文件中。这样它们将作为命令行键进入编译。

这些是唯一定义 WINVER 的地方:

  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\odbcinst.h,第 28(1) 行。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\sdkddkver.h,第 166(2)、168(1) 行。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinDef.h,第 39(1) 行。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinGDI.h,第 43(1) 行。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinReg.h,第 29(1) 行。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinResrc.h,第 21(1) 行。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinUser.h,第 39(1) 行。

这些是唯一定义了 _WIN32_WINNT 的地方:

  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\ObjBase.h,第 18(1)、22(1)、26(1)、30(1) 行。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\ObjIdl.h,第 604(1)、607(1)、610(1)、613(1) 行。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\sdkddkver.h,第 151(1) 行。
  • c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinResrc.h,第 33(1) 行。

如您所见,定义在 #ifdef 下。 (我没有检查所有地方)。

如果您有正确的项目、正确的 SDK 版本等,则不应覆盖您项目中的定义。

如果您的项目中的定义没有正确传播,这意味着某些事情被搞砸了。很难说到底是什么。

无论如何,正确的方法是在您的项目或 makefile 中定义这些参数。

关于c++ - #define 变量被忽略并在 windows.h 中重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12829415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com