error C2065: “LOAD_LIBRARY_SEARCH_SYSTEM32”

来源:互联网 发布:怎样用手机链接软件 编辑:程序博客网 时间:2024/06/05 06:43

VS2010切换至110_xp后编译报错 error C2065: “LOAD_LIBRARY_SEARCH_SYSTEM32”

最近使用vs2012(打补丁到Update5)开发基于ATL的项目出现了这个编译错误。而且只有一条,到网上搜索了半天也没有真正说明问题,只有自己来了。找到相关报错如下:

1>------ Build started: Project: Win32Project1, Configuration: Debug Win32 ------1>  stdafx.cpp1>c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\atlcore.h(632): error C2065: 'LOAD_LIBRARY_SEARCH_SYSTEM32' : undeclared identifier========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

对应的代码如下:

inline HMODULE AtlLoadSystemLibraryUsingFullPath(_In_z_ const WCHAR *pszLibrary){#if (NTDDI_VERSION >= NTDDI_WIN8)    return(::LoadLibraryExW(pszLibrary, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32));#else    WCHAR wszLoadPath[MAX_PATH+1];    if (::GetSystemDirectoryW(wszLoadPath, _countof(wszLoadPath)) == 0)    {        return NULL;    ... 后面的就省略了#endif

关键可以看到 NTDDI_VERSION >= NTDDI_WIN8 这个表达式,既然选择了编译到 WINXP 这个表达式如何也不可能成立呀。

逐一打印 发现 NTDDI_VERSION,和 NTDDI_WIN8, 居然 NTDDI_WIN8 是空。此时再分析一下,就找到问题了:
- 使用Platform Tool 为 110_xp 时指向C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A
- 使用Platform Tool 为 110 的时候 C:\Program Files (x86)\Windows Kits\8.0
- 而 NTDDI_WIN8 在 v7.1A 版本中 没有定义,只定义到 NTDDI_WIN7。
接下来就好办了问题原因找到了,那么自然就好办了。
方法一:
在 stdafx.h 中在调用 atlbase.h 之前,加入对 NTDDI_WIN8 的定义。

#ifndef NTDDI_WIN8#define NTDDI_WIN8       0x06020000#endif 

方法二:
直接修改 v7.1A 的版本的 SDKDDKVer.h line 131

#define NTDDI_WIN8 0x06020000

整个问题其实很简单,但是遇到问题就百度的习惯,让自己先绕了远路,留下这篇来提醒一下自己吧。


有价值的参考不多:
http://www.vcerror.com/?p=1101

1 0
原创粉丝点击