【发布时间】:2021-12-14 13:20:16
【问题描述】:
我们目前使用 Visual Studio 2017 构建我们的 C++ 代码,直到最近我们还需要让我们的二进制文件在 Windows 7 上运行。
因此,我们在 C++ 项目中针对要使用的 Windows SDK 版本的设置是“8.1”,并且通过将 _WIN32_WINNT=0x601 定义为预处理器宏,我们将 Windows 7 定位为平台,正如 Microsoft 在各个地方所推荐的那样。
现在我们要添加 ARM64 作为新平台,但这需要将 Windows SDK 版本设置为 10.0.10240.0,并且由于要使用的 Windows SDK 版本是项目全局设置,这会影响现有的其他平台我们也为(Win32 和 x64)构建。
现在如果我们将 Windows SDK 版本从 8.1 设置为 10.0.10240.0(或更高版本),只要我们使用 _WIN32_WINNT=0x602(针对 Windows 8.1),我们是否会失去在 Windows 8.1 上运行代码的能力?
【问题讨论】:
-
不,
_WIN32_WINNT的唯一作用是防止你意外使用Win10才有的winapi函数。即使你这样做了,当你在 8.1 机器上测试它时,你很快就会发现。看看瞄准 arm64 的可行性,这类机器总是被锁定,只接受来自商店的程序。 -
“要使用的 Windows SDK 版本是项目全局设置” - 不,它是每个配置的设置。没有什么能阻止您为 ARM64 目标和所有其他目标选择不同的值。
-
@IInspectable:如果我在 VS2017 中显示我的一个项目的项目属性,并且如果我将“Windows SDK 版本”的值更改为“所有配置”和平台“x64”,对于当前的其他目标“Win32”(即 x86),该值也会更改。对于 ARM64,也将观察到相同的行为。如果我更改此值,“
”中的值“ ”会在 vcxproj 文件中更改。将 SDK 版本设置为在每个配置或每个平台级别上使用会很棒。我该如何做到这一点? -
@HansPassant:我认为您适合 Windows RT,但不适用于 Arm64 上的 Windows 10 或 Windows 11。
-
你找错地方了。你应该是 C/C++ -> Preprocessor -> Preprocessor Definitions.
标签: c++ windows visual-studio winapi visual-c++