我正在尝试有条件地使用 (if可用)功能PathCchAppend。我已经从标题中获取了函数签名pathcch.h
。但是,当我尝试从中获取函数的地址时SHLWAPI.DLL
, 它失败:
auto pca = GetProcAddress(GetModuleHandle(L"shlwapi.dll"), "PathCchAppend");
使用 Depends,我看到这个 DLL 中不存在这个函数(我在 Windows 10 上)。不存在任何pathcch.dll
因此也无法加载它。
这个函数放在哪个DLL中?
编辑:
感谢您的回答。在这里我找到了 DLL 的名称,如下面的答案中所述:
https://learn.microsoft.com/en-us/windows/win32/apiindex/windows-81-api-sets
您可以使用DUMPBIN从 .lib 文件中提取此信息的工具:
dumpbin /headers /path/to/pathcch.lib
然后,您需要筛选输出以找到有问题的函数。例如,这是 x64 版本的 lib 文件的输出:
Version : 0
Machine : 8664 (x64)
TimeDateStamp: FFFFFFFF Sun Feb 07 06:28:15 2106
SizeOfData : 0000002E
DLL name : api-ms-win-core-path-l1-1-0.dll
Symbol name : PathCchAppend
Type : code
Name type : name
Hint : 5
Name : PathCchAppend
关于硬编码这个DLL名称的向后和向前兼容性的评论,.lib文件硬编码了DLL名称。因此,如果您使用 .lib 文件链接到该函数,那么您就是在硬编码对该 DLL 的依赖项。这将 Microsoft 绑定到一份合同中,以便在 Windows 的未来版本中继续从此 DLL 导出此函数。因此,使用显式链接并不或多或少安全LoadLibrary/GetProcAddress
与使用 SDK 中的 .lib 文件隐式链接不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)