有一些函数,最近碰到的比如SwitchToThread(),UrlUnescape()等等,都需要最新版本的SDK支持才可以,但是根据MSDN,这些函数所在的DLL的版本号都符合要求,但就是找不到这个函数,这应该怎么解决呢?不想更新SDK。
比如UrlUnescapeRequirements
Version 5.00 and later of Shlwapi.dll Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 5.0 or later).
Windows 95/98/Me: Requires Windows 98 (or Windows 95 with Internet Explorer 5.0 or later).
Header: Declared in Shlwapi.h.
Import Library: Shlwapi.lib.这些条件我都满足,但还是不能在相应dll中找到该函数,比如:
HINSTANCE hinstDll;
hinstDll = LoadLibrary("Shlwapi.dll");//现在Shlwapi.dll版本6.0以上
FARPROC ptr=NULL;
ptr=GetProcAddress(hinstDll, "UrlUnescape");
得到的指针就是空值,不论怎样定义什么_WIN32_IE 到0x0500都不行论坛上以前问到这种问题的帖子也不少,大家一起讨论一下解决这种问题
比如UrlUnescapeRequirements
Version 5.00 and later of Shlwapi.dll Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 5.0 or later).
Windows 95/98/Me: Requires Windows 98 (or Windows 95 with Internet Explorer 5.0 or later).
Header: Declared in Shlwapi.h.
Import Library: Shlwapi.lib.这些条件我都满足,但还是不能在相应dll中找到该函数,比如:
HINSTANCE hinstDll;
hinstDll = LoadLibrary("Shlwapi.dll");//现在Shlwapi.dll版本6.0以上
FARPROC ptr=NULL;
ptr=GetProcAddress(hinstDll, "UrlUnescape");
得到的指针就是空值,不论怎样定义什么_WIN32_IE 到0x0500都不行论坛上以前问到这种问题的帖子也不少,大家一起讨论一下解决这种问题
...
#define UrlUnescape UrlUnescapeW
...
#else
...
#define UrlUnescape UrlUnescapeA
...
#endif //UNICODE
Windows NT/2000/XP: Included in Windows NT 4.0 and later.
Windows 95/98/Me: Unsupported.
Header: Declared in Winbase.h; include Windows.h.
Library: Use Kernel32.lib.
上面要求的是.lib,但是Kernel32.dll并不一定存在这个函数,所以就会导致用
LoadLibrary()
GetProcAddress()返回NULL还有就是有一些根本就不是函数而是Microsoft定义的宏,这些宏在dll中也是不存在的
比如:SetWindowLongPtr,这个在MSDN上标明着
Library: Use User32.lib.而在windows 2000 Professional中的User32.dll中就没有这个函数的定义,他只是一个宏而已我的方法是在用到某个不常用函数的时候先用vc的Depends工具查看一下,相关的dll中有没有该函数。来查看这个函数是否存在,如果实在不行就得更新SDK了:(上面是俺个人的一点理解!欢迎大家讨论!
不足的地方希望大家补充,共同进步:)