c++ - 哪个 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
解决方案
您可以使用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 文件进行隐式链接相比,显式链接并不安全。
推荐阅读
- python - Python Rock Paper Scissor bug 我不明白
- javascript - 如何在 React 中制作动态模态?
- r - 如何旋转列?
- xml - Flutter - 如何解析嵌套的 XML 数据以使用 Dart 模型显示,从文本数据服务器接收
- python-3.x - 币安API如何在现货交易中设置止损(STOP_LOSS_LIMIT和/或TAKE_PROFIT_LIMIT)订单?
- python - Wtform HiddenField 设置值
- c# - 加入两个表并过滤以检索名称
- java - jar文件移动到另一台计算机时无法访问Mysql数据库
- firebase - 使用 Consumer 与 Provider 发生冲突时出错
- flutter - 下拉菜单中的 Flutter 可扩展