我正在使用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