c++ - 什么是 Windows 工具包以及它们如何工作?

标签 c++ windows winapi visual-studio-2012 visual-studio-2015

在过去,当在 Visual Studio 中开发 Windows 上的 C++ 项目时,您的 Visual Studio 版本将拥有自己版本的 C 和 C++ 库,并且您的项目将引用特定版本的 Windows SDK 以便访问用于访问 Win32 平台的 header 。如果您安装了多个版本的 Windows SDK,则会有一个涉及环境变量的复杂系统,使您能够选择 Visual Studio 默认使用的 Windows SDK 版本。

它不是很好,让它正常工作需要一些挖掘,但它只是工作。

刚刚从 VS2012 升级到 VS2015,在我看来,无论这个系统被替换成什么,要么是彻底坏掉了,要么就是我不理解它。

  1. 将包含 conio.h 的简单 VS2012 C++ 控制台应用程序升级到 VS2015 中断,未报告任何错误。为什么? conio.h 不再存在于 Visual Studio C/C++ 库中,而是存在于 Windows Kit 10 中,升级项目不会重新安装所使用的 SDK(如您所料)。

  2. 在 VS2015 中创建一个全新的 Hello World C++ 应用程序,C++ 项目包括继承 $(VC_IncludePath) 和 $(WindowsSDK_IncludePath) 的目录。 $(WindowsSDK_IncludePath) 从 C:\Program Files (x86)\Windows Kits\8.1 中提取 header ,而 $(VC_IncludePath) 从 C:\Program Files (x86)\Windows Kits\10 中提取 header 。

    <

如此简单的项目升级失败,升级没有报错。清理新的控制台项目同时从 2 个不同的 Windows 套件安装中提取 header ,我现在在 C:\Program Files (x86)\Microsoft SDKs 和 C:\Program Files (x86)\Windows Kits 下有 8.1 和 10 的条目。 Windows Kit 8.1 包含 Win32 和 WinRt header ,而 Windows Kit 10 包含 C/C++ header 。

我的安装是否配置错误和损坏,或者这应该是一团糟?

如果这个困惑是它应该的样子,它是如何工作的?我曾尝试在 MSDN 上搜索有关 Windows 工具包的信息,但除了有关 Windows 驱动程序工具包的内容外,一无所获,它曾经是完全不同的东西,但我不知道现在是否仍然如此。

是否有任何我遗漏的文档解释了这个库配置背后的基本原理以及它的用途?

最佳答案

我已经多次遇到这个问题的几个不同变体,解决从 VS2012 升级到 VS2015 的项目的头文件和库依赖项的问题。

Hans 对我的问题的回复确实解决了 header 的问题,但在遇到库依赖项的相同问题后,我有一个可能更简单的解决方案,也适用于失败的库依赖项解析。

在 VS2015 中打开 VS2012 项目时,不会执行自动升级。打开项目属性并将 General -> Platform Toolset 更改为 Visual Studio 2015 (v140) 可能会重现我原始问题中描述的 header 解析错误的变体或不同的库依赖项解析错误。

我发现解决这些问题的最简单方法是打开项目属性并转到 VC++ 目录 -> 包含目录。在您自己添加到项目的任何路径中,您可能会发现 $(VCInstallDir)\include;$(VCInstallDir\atlmfc\include;$(WindowsSDK_IncludePath)

单击路径以显示下拉列表并单击编辑,这将显示一个包含三个部分的对话框,从上到下分别是明确定义的路径、评估的路径和继承的路径。在最底部是一个复选框“从父项或项目默认值继承”,我总是发现它最初是未选中的。

从显式定义的包含路径中删除上述的 $(VCInstallDir)\include;$(VCInstallDir\atlmfc\include;$(WindowsSDK_IncludePath) 条目并选择“从父​​项或项目默认值继承”设置。这应该可以解决任何问题头文件依赖问题。

如果您还有库引用问题,请对库目录条目执行相同的操作,编辑设置,删除明确的平台条目并选择“从父​​项或项目默认值继承”。 (即使您没有看到任何链接器错误,这样做也是个好主意,否则您可能最终会在链接到 VS2012 的库时使用 VS2015 的平台工具集编译器选项。

我不知道为什么这对我来说是个问题,因为我没有遇到任何其他人遇到类似的问题,我以前升级 Visual Studio 解决方案时没有遇到问题。

我也没有发现为什么某些版本的 Windows 套件现在包含 Windows 平台 header 或 C++ 库 header ,而以前的 SDK 总是包含平台 header ,而 C++ header 总是部分或 Visual Studio 安装。看起来像这样的更改应该在某处或其他文档中有一个关于它的开发博客。但只要它有效,我就不会太在意。

我希望这对某些人有帮助。

关于c++ - 什么是 Windows 工具包以及它们如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36842484/

相关文章:

c++ - 如何将 "\u002f"转换为 "/"(在 C++ 中)?

windows - 如何使用 .BAT 文件列出隐藏文件?

c - GetPixel优化winapi

c# - 前景窗口大小总是错误

python - 如何在 Windows 上最大化窗口并禁用调整大小而不覆盖任务栏 - tkinter/tk-toolkit

c++ - GLM : function taking degrees as a parameter is deprecated (WHEN USING RADIANS)

c++ - 通过 RInside 运行时 abline 出错

C++ "while"解释

windows - 在 Windows 主机上访问 docker 容器 URL

windows批处理文件按列将csv合并到文件夹中