Aja*_*jay 3 c++ dll winapi windows-shell visual-c++
我正在尝试有条件地使用(如果可用)该函数PathCchAppend。我已经从 header 获得了函数签名pathcch.h。但是,当我尝试从 获取函数的地址时SHLWAPI.DLL,它失败了:
auto pca = GetProcAddress(GetModuleHandle(L"shlwapi.dll"), "PathCchAppend");
Run Code Online (Sandbox Code Playgroud)
使用 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
Run Code Online (Sandbox Code Playgroud)
然后,您需要筛选输出以找到有问题的函数。例如,这是 x64 版本的 lib 文件的输出:
版本:0 机器:8664(x64) 时间日期戳:FFFFFFFF 2106 年 2 月 7 日星期日 06:28:15 数据大小:0000002E DLL名称:api-ms-win-core-path-l1-1-0.dll 符号名称:PathCchAppend 类型:代码 姓名类型:姓名 提示:5 名称:PathCchAppend
关于硬编码这个DLL名称的向后和向前兼容性的评论,.lib文件硬编码了DLL名称。因此,如果您使用 .lib 文件链接到该函数,那么您就是在硬编码对该 DLL 的依赖项。这将 Microsoft 绑定到一份合同中,以便在 Windows 的未来版本中继续从此 DLL 导出此函数。LoadLibrary/GetProcAddress因此,使用SDK 中的 .lib 文件显式链接并不比使用 .lib 文件隐式链接更安全。