【问题标题】:How to use Visual Studio 2019 to target Windows 7?如何使用 Visual Studio 2019 面向 Windows 7?
【发布时间】:2020-12-31 14:12:40
【问题描述】:

我想使用 Visual Studio 2019 来享受最新的 C++ 添加,但面向 Windows 7。

我使用 VS 2019 向导(在 Windows 10 上运行)创建了一个 Windows C++ 应用程序。

向导创建了一个targetver.h 文件,其内容如下:

#pragma once

// // Including SDKDDKVer.h defines the highest available Windows platform.
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
#include <SDKDDKVer.h>

我按照注释行中的说明,在targetver.h#include &lt;SDKDDKVer.h&gt; 行之前)中添加了以下行:

// Target Windows 7 SP1
#include <WinSDKVer.h>
#define _WIN32_WINNT 0x0601

为了测试这一点,我在程序的主函数中调用了一个在 Windows 7 中支持的 API (PathCchAppend)。

程序构建良好(我静态链接 CRT),并且在 Windows 10 中运行良好。

同一程序在 Windows 7 中执行时失败,显示以下错误消息:

现在,程序应该完全未编译,因为我指定了 Windows 7 目标,而上述 API 在 Windows 7 上可用。

这是 Windows SDK 中的错误吗?

是否可以使用 VS 2019 和 Windows 10 SDK 以 Windows 7 为目标,在代码中使用 Windows 7 不支持的 API 或结构时,在构建过程中出现错误,以及如何?

【问题讨论】:

  • @dewaffled:稍后我会详细阅读您链接的问题,但如果是关于与 CRT 的静态链接,我已经这样做了。对我来说,代码根本不应该编译,因为我试图调用 Windows 7 不支持的 API。
  • 你尝试使用 api set (api-ms-win-core-path-l1-1-0) 和 api (PathCchAppend) win7中根本不存在。
  • 并且根据所选版本,pathcch.h 中没有任何条件块。所以编译你的代码ok,构建ok,但是只能在win8+中运行
  • PathCchAppend 是在 Windows 8 中引入的。它在 (PathCch.h) 中声明的头文件似乎根本没有对 SDK 版本进行任何测试,这就是您编译成功的原因。这是 SDK 中的错误吗?我想是的。

标签: c++ winapi windows-7


【解决方案1】:

VS 2019 的工具集和针对 Windows 7 Service Pack 1 的最新 Windows 10 SDK 支持。

您已经在 Windows 10 SDK 中正确配置了 Windows 标头:

#include <winsdkver.h>
#define _WIN32_WINNT 0x0601
#include <sdkddkver.h>

您仍然可以在此模式下调用 Windows 7 不支持的 API,这就是调用 PathCchAppend 会在运行时构建、链接和失败的原因。

您看到的问题也可能与您的目标计算机上没有通用 C/C++ 运行时有关。在您的目标测试机器上安装x86 和/或x64 native 版本。

Microsoft Docs

【讨论】:

  • 我静态链接到 CRT。我还应该在 Windows 7 上安装额外的 DLL 吗?我不能只部署一个用 VS 2019 构建并静态链接到 CRT 的 EXE 吗?
  • 此外,我预计构建会失败,因为我尝试(故意)调用 Windows 7 上支持的 API。
  • 问题与 crt 无关 - api-ms-win-core-path-l1-1-0 (又名 kernelbase )和 PathCchAppend 不是 crt
猜你喜欢
  • 2021-09-26
  • 2021-12-04
  • 2020-08-09
  • 2020-03-04
  • 1970-01-01
  • 2021-09-19
  • 2013-05-06
  • 2021-09-03
  • 1970-01-01
相关资源
最近更新 更多