我知道shell32.dll导出两种类型的函数 - ANSI和UNICODE。 (为简单起见,我只讨论带有CHAR * / WCHAR *参数的函数。)
例如,ShellMessageBoxA
是ANSI版本,而ShellMessageBoxW
是Unicode版本。 ShellMessageBox
是头文件中定义的宏:
#ifdef UNICODE
#define ShellMessageBox ShellMessageBoxW
#else
#define ShellMessageBox ShellMessageBoxA
#endif // !UNICODE
因此,ShellMessageBox
不存在作为从Shell32.dll导出的函数。
但是现在我发现SHGetPathFromIDList
被导出了三次:
SHGetPathFromIDList
SHGetPathFromIDListA
SHGetPathFromIDListW
这是什么目的?
答案 0 :(得分:4)
SHGetPathFromIDList
适用于最初针对没有A
和W
导出的旧版Windows的旧程序,因为它不支持Unicode。此导出是ANSI版本。
SHGetPathFromIDListA
和SHGetPathFromIDListW
是ANSI和Unicode版本。
如果您使用dumpbin
或Dependency Walker检查入口点,您会发现SHGetPathFromIDList
的入口点与SHGetPathFromIDListA
的入口点相同。
现代SDK会链接到SHGetPathFromIDListA
或SHGetPathFromIDListW
,但绝不会链接到SHGetPathFromIDList
。