首页 > 解决方案 > 哪个 DLL 有 PathCchAppend?

问题描述

我正在尝试有条件地使用(如果可用)该功能PathCchAppend。我从 header 获得了函数签名pathcch.h。但是,当我尝试从中获取函数的地址时SHLWAPI.DLL,它失败了:

auto pca = GetProcAddress(GetModuleHandle(L"shlwapi.dll"), "PathCchAppend");

使用 Depends,我看到这个 DLL 中不存在这个函数(我在 Windows 10 上)。不存在任何pathcch.dll内容,因此也无法加载。

这个函数放在哪个DLL中?

编辑:感谢答案。在这里,我找到了以下答案中提到的 DLL 的名称:

https://docs.microsoft.com/en-us/windows/win32/apiindex/windows-81-api-sets

标签: c++winapivisual-c++dllwindows-shell

解决方案


您可以使用DUMPBIN工具从 .lib 文件中提取此信息:

dumpbin /headers /path/to/pathcch.lib

然后,您需要筛选输出以找到有问题的函数。例如,这是 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 文件进行隐式链接相比,显式链接并不安全。


推荐阅读