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