【发布时间】: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 <SDKDDKVer.h> 行之前)中添加了以下行:
// 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 中的错误吗?我想是的。