哪个DLL具有Pathcchappend



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

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

使用依赖关系,我看到此功能在此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

然后,您需要筛选输出才能找到所讨论的功能。例如,这是LIB文件的X64版本的输出:

  版本:0  机器:8664(x64(  timedatestamp:ffffffff太阳2月7日06:28:15 2106  sizeofdata: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文件的链接相比,明确链接不可能或多或少是安全的。

api-ms-win-core-path-l1-1-0.dll不是磁盘上的实际dll,也不是文件,而是一些虚拟名称,因此加载程序能够在末尾映射到文件上的某些磁盘。扩展DLL仅由会议或仅由加载程序作为系统要求,但也不意味着任何文件。

您可以在加载程序操作的上下文中使用API集名称,例如LoadLibrary或P/Indoke而不是DLL模块名称,以确保到达实现的正确路由,无论当前设备上实际实现了API。但是,当您执行此操作时,必须在合同名称末尾附加字符串.dll。这是加载程序正常运行的要求,实际上并不是合同名称的一部分。尽管合同名称在此上下文中与DLL名称相似,但它们与DLL模块名称根本不同,并且不直接参考磁盘上的文件。

https://learn.microsoft.com/en-us/windows/win32/apiindex/windows-apisets-pisets#api-set-connarts-names

因此,问题的真正答案是KernelBase.dll。这对于像我这样的用例很重要,我需要根据实际DLL创建一个LIB文件,只有KernelBase.dll才有可能。MS维护一些其他文档,也可以提供一些API集的基础文件。

相关内容

  • 没有找到相关文章

最新更新