我正在使用Windows 7,Visual Studio 2012和DirectX 11.今天我已经添加了" DDSTextureLoader"从DirectXTex到我的项目的模块(我只是将DDSTextureLoader.cpp和DDSTextureLoader.h复制到我的项目文件夹中并将它们添加到解决方案中)。该项目编译得很好,但当我运行它时,它向我显示以下错误:
方法CreateFile2中的入口点无法在库DLL KERNEL32.dll中找到
(或者是那样的,我有一个抛光版的Windows,所以我不确定这个错误信息的英文版本。)
我发现它与SDK版本有关,而且可以修复"将#define _WIN32_WINNT
的值更改为_WIN32_WINNT_WIN7
中的_WIN32_WINNT_WIN8
(默认值为C:\Program Files (x86)\Windows Kits\8.0\Include\shared\sdkddkver.h
)。
在这样做之后,该项目似乎工作正常,但我不认为手动编辑SDK的文件,特别是因为它也被所有其他项目使用,是一个很好的解决方案。有没有更好的方法来摆脱上述错误信息?或者我的项目/ SDK设置中可能有一些错误?
答案 0 :(得分:1)
Windows SDK已经使用了_WIN32_WINNT控件定义多年,但是Windows 8.x SDK中的行为更改导致了很多混乱:它默认为最新的&# 39;操作系统而不是最老的' OS支持。
这意味着当您使用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