什么是_WIN32_WINNT,它如何工作?

9

编辑2:好的,我改用Orwell DevC++,其中包括“winnt.h”,其中包含#define KEY_WOW64_64KEY 0x0100,但它仍然无法工作。(参见编辑1:)

编辑1:我查看了CodeBlock和DevC++附带的“winnt.h”,DevC++缺少以下行:

#if (_WIN32_WINNT >= 0x0502)
#define KEY_WOW64_64KEY 0x0100
#define KEY_WOW64_32KEY 0x0200
#endif

将上述代码放入DevC++的wint.h中并不能起作用。


原帖: 我有一个32位应用程序(在DevC++和Windows 7 64位开发),其中之一的任务是读取64位应用程序的注册表,因此我正在尝试在RegOpenKeyEx中使用“KEY_WOW64_64KEY”标志,并找到了几篇关于如何使用_WIN32_WINNT的文章:这个这个

当我在CodeBlock项目(测试项目)中使用它时,它的效果非常好,但是相同的代码在DevC++中无法工作,由于codeblock存在其他问题,我现在无法将其移植到codeblock中。

我该如何使其在DevC++中正常运行?

谢谢


6
问题1:你是否尝试在谷歌中搜索_WIN32_WINNT,它会直接引导到相关的Microsoft文档? - Marc Glisse
你能否让DevC++针对标准Windows平台SDK进行构建?然后它应该可以正常工作。你能否提供更多关于在DevC++中无法工作的信息呢? - Rup
@Rup,不知道你的意思。 - StudentX
1
我的意思是,当你使用DevC++进行编译时,你正在编译的头文件(.h文件)在哪里?你应该查看这些文件,可能有一个叫做winnt.h的文件,查看KEY_WOW64_64KEY定义周围的条件语句。如果根本没有定义,那么你需要一个新版本的Windows头文件。当然,如果只需要一个值,你可以将定义复制到自己的代码中:#define KEY_WOW64_64KEY (0x0100)。但你应该尝试让头文件版本也能正常工作。 - Rup
2
您是否有任何预编译头机制需要使用修改后的头文件进行重新构建?如果没有,现在最简单的更改是将RegOpenKeyEx调用中的KEY_WOW64_64KEY替换为0x100 - Rup
显示剩余3条评论
2个回答

17

它定义了要使用的Windows头文件版本。在#include <Windows.h>之前必须声明。

如果您要修改它,还有一些类似的变量应该设置:

MSDN使用Windows头文件


1
  1. _WIN32_WINNT是一个预处理器标记,无论在何处使用_WIN32_WINNT,都将其替换为(0x0601)。预处理器只会扫描整个文件,并在发现_WIN32_WINNT时将其替换为(0x0601)

很有可能存在ifdef预处理器守卫,用于启用/禁用预处理器常量。例如:

#ifdef _WIN32_WINNT
#define KEY32 32
#endif

在这里,只有在定义了_WIN32_WINNT时,KEY32才会被定义。

  1. 它已经可以在DevC++中使用。

很有可能存在ifdef预处理器守卫,以启用/禁用预处理器常量。但我认为这不是问题所在,因为相同的代码可以在CodeBlock中工作。 - StudentX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接