【问题标题】:Targetting Windows 8.1 with Windows 10 SDK in C++使用 C++ 中的 Windows 10 SDK 以 Windows 8.1 为目标
【发布时间】: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++


【解决方案1】:

余敏欣的评论就是这个问题的答案。 This discussion 指向Windows SDK page,它明确指出当前的 Win10 SDK 允许针对 Windows 7 SP1 和 Windows 8.1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多