我一直在 VS2005 项目中使用 GetFileInformationByHandleEx 例程。当时该功能可用于 FileExtd.h 和 FileExtd.lib,您必须手动下载它。现在我想将项目迁移到 VS2010,并且我已经看到新 SDK 附带了一个 FileExtd.lib。
在 VS2010 中,GetFileInformationByHandleEx 是在 winbase.h 中声明的,但为了保持与 WindowXP 的兼容性,我必须声明一个 _WIN32_WINNT 具有较低的值(如 NTDDI_WINXP),它会禁用例程定义。否则它将静态链接到 kernel32.dll(该例程在 WinXP 上不可用)。因此,我认为解决方案是将旧的 FileExtd.h 与 VS2010 版本的 FileExtd.lib 结合使用。但如果我这样做,我会出现以下链接错误:
1>fileextd.lib(fileextd.obj) : error LNK2019: unresolved external symbol __imp__RtlSetLastWin32Error@4 referenced in function _BaseSetLastNTError@4
1>fileextd.lib(fileextd.obj) : error LNK2019: unresolved external symbol __imp__NtWaitForSingleObject@12 referenced in function _GetFileInformationByHandleEx@16
我试图保留 winbase.h 的声明并在 kernel32.lib 之前声明 FileExtd.lib,但它仍然链接到 kernel32.dll。
另外,是否可以将使用其他版本的 Visual Studio 编译的库组合起来?我之所以问这个问题是因为我在我的 VS2010 项目中使用的是 VS2005 版本,如果 FileExtd.lib 可以编译并且运行良好。