c++ 使用Boost时的D_WIN32_WINNT编译器警告

ruoxqz4g  于 2022-12-15  发布在  其他
关注(0)|答案(7)|浏览(203)

不确定此错误的原因。已将-D_WIN32_WINNT=0x0501添加到Visual Studio的“项目属性”下的“命令行”选项,但它表示无法识别它,并且警告仍然出现。
我也不确定如何添加预处理器定义。
1〉请正确定义_WIN32_WINNT或_WIN32_WINDOWS。例如:
1〉-将-D_WIN32_WINNT= 0x 0501添加到编译器命令行;或
1〉-将_WIN32_WINNT= 0x 0501添加到项目的预处理器定义中。

kpbwa7wx

kpbwa7wx1#

在您的顶级源代码中添加以下行。

#include <SDKDDKVer.h>
tzxcd3kk

tzxcd3kk2#

我想你已经很接近了。John Dibling给出了三种方法,看起来你尝试了第三种解决方案,那就是“进入你的项目设置......在配置属性-〉C/C++-〉预处理器标题下,添加;_WIN32_WINNT = 0x0501“。你回答说你仍然会得到那个错误,并提供了你的预处理器设置的内容。WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT = 0x0501.我想如果你把_WIN32_WINNT = 0x0501改成_WIN32_WINNT=0x0501你就可以解决这个问题了。当我尝试有空格的版本时,它并没有消 debugging 误,但是去掉空格就消除了。

f4t66c6m

f4t66c6m3#

有几个选择。
1)如果你有一个主头文件,比如stdafx. h,你可以添加这个:

#define _WIN32_WINNT 0x0501

或者你可以把它加到任何你需要的地方。
2)可以添加-D _WIN32_WINNT=0x0501(注意空格)
3)转到项目属性〉配置属性〉C/C++〉Proprocessor。将;_WIN32_WINNT=0x0501添加到预处理器定义
就我个人而言,我选择了#3,因为毫无疑问,它是在正确的时间在正确的翻译单元中定义的,而且我宁愿将所有的#defines放在一个地方,而不是将一些放在Preprocessor Defines中,而将其他放在高级选项卡中。

r1wp621o

r1wp621o4#

在D后面加一个空格

ncgqoxb0

ncgqoxb05#

你应该像很多人建议的那样定义你想要的窗口版本:

// Target Windows XP
#define _WIN32_WINNT 0x0501

您不想使用碰巧安装的SDK版本的原因是:

  • 有可复制的版本。你不想只是拿起什么碰巧安装,因为这可以非常为每个人试图建立。
  • 控制你的目标平台。你不想仅仅因为你碰巧在Windows 11上编译就瞄准Windows 11。作为程序员,你想控制所做的事情。
  • 支持最大范围的Windows版本。用户会很高兴他们可以在旧的Windows版本上运行您的程序。
slhcrj9b

slhcrj9b6#

对于代码块,您可以这样做。
右键单击**Project Name** on your left >> Click 'Build Options' >> Select Debug or Release on your left >> Select 'Compiler Settings' Tab on the right >> Select #defines tab >>,然后按原样添加以下行:

_WIN32_WINNT=0x0501

>> Click Ok >> Close >> Right click **Project Name** again >> Re-build.
ix0qys7i

ix0qys7i7#

OP没有问过CMake,但是google把我带到了这里。如果你正在使用CMake,试着把这个添加到你的(顶级)CMakeLists.txt中:

if (WIN32)
  add_definitions(-D_WIN32_WINNT=<myWindowsTarget>
endif()

我对Windows 10很感兴趣,所以myWindowsTarget就是0x0A00。以下是Windows Targets的完整列表

相关问题