c++ - 哪个 DLL 有 PathCchAppend?

标签 c++ winapi visual-c++ dll windows-shell

我正在尝试有条件地使用(如果可用)函数 PathCchAppend .我从 header 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 绑定(bind)到一个契约(Contract)中,以便在未来的 Windows 版本中继续从此 DLL 中导出此函数。因此,使用 LoadLibrary/GetProcAddress 显式链接与使用 SDK 中的 .lib 文件隐式链接一样安全。

关于c++ - 哪个 DLL 有 PathCchAppend?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57354840/

相关文章:

c++ - 我可以从 "treat warnings as errors"中排除一些特定的警告而不禁用它们吗?

c++ - 使用映射的迭代器混淆

c++ - 虚拟函数调用的性能作为for循环中的上限

c++ - 如何将 char* 转换为 wchar_t*?

windows - 在没有 lodctr 的情况下注册性能计数器

c++ - 初始化程序, union 的特定成员

c++ - opencv 项目中的 CMakeLists.txt 出错

c++ - 为什么新的 VS2013 项目的功能在文件是.cpp 的链接中未解决,但如果文件是.c 则可以

c++ - 设置 std::threads 的线程亲和性

c# - 将字符串数组从 COM 传递到 C#