其他分享
首页 > 其他分享> > c-哪个DLL具有PathCchAppend?

c-哪个DLL具有PathCchAppend?

作者:互联网

我试图有条件地使用(如果可用)功能PathCchAppend.我从头文件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文件的输出:

  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约束在合同中,以便在Windows的将来版本中继续从此DLL导出此功能.因此,使用LoadLibrary / GetProcAddress显式链接比使用SDK中的.lib文件隐式链接要安全得多.

标签:windows-shell,c,visual-c,winapi,dll
来源: https://codeday.me/bug/20191012/1899581.html