SDK / OS版本不正确?

我正在使用Windows 7,Visual Studio 2012和DirectX 11.今天,我已经从DirectXTex添加了“DDSTextureLoader”模块到我的项目(我刚刚复制DDSTextureLoader.cpp和DDSTextureLoader.h到我的项目文件夹,并将其添加到解)。 该项目编译好,但当我跑它显示我以下错误:

在库DLL DLL KERNEL32.dll中找不到方法CreateFile2中的入口点

(或者像这样,我有一个波兰语版本的Windows,所以我不确定这个错误信息是否与英文相对应。)

我发现它与SDK版本有关,可以通过在C:\Program Files (x86)\Windows Kits\8.0\Include\shared\sdkddkver.h _WIN32_WINNT_WIN7 #define _WIN32_WINNT的值更改为_WIN32_WINNT_WIN7 (默认为_WIN32_WINNT_WIN8 )来“固定” C:\Program Files (x86)\Windows Kits\8.0\Include\shared\sdkddkver.h

这样做后,该项目似乎工作正常,但我不认为手动编辑SDK的文件,特别是因为它也用于所有其他项目 ,是一个很好的解决scheme。 有没有更好的办法来摆脱上述错误信息? 或者,也许我的项目/ SDK设置中有一些错误?

_WIN32_WINNT控件定义已经被Windows SDK使用了很多年,但是在Windows 8.x SDK中出现了一些行为改变,导致了很多混淆:它默认为“最新”的操作系统,而不是最老的操作系统'操作系统支持。

这意味着当您使用VS 2013构建新项目时,它将默认为0x0603,并且需要Windows 8.1或更高版本。 如果使用VS 2012构建相同的桌面项目,则默认为0x602,并且需要Windows 8.0或更高版本。 这对于Windows应用商店应用来说非常合适,但是对于Win32桌面来说这真是令人困惑。 值得庆幸的是,修复非常简单:为使用VS 2012 / VS 2013构建的Win32桌面应用程序添加预处理器定义_WIN32_WINNT = 0x0600。Windows 8.x SDK最早支持的操作系统是Windows Vista(0x0600)。 如果您可以指望Windows 7或更高版本,请将其设置为0x0601。

如果您使用的是“v110_xp”或“v120_xp”平台工具集,则实际上使用的是可支持Windows XP的Windows 7.1A SDK,并且您将设置_WIN32_WINNT = 0x0501。

请参阅MSDN