哪个 DLL 有 PathCchAppend?

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

Dav*_*nan 5

您可以使用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 文件隐式链接更安全。

  • 当微软从 shlwapi.dll 中取出它时,显然并没有感到特别的束缚 (3认同)