标签:windows-shell c visual-c winapi dll
我试图有条件地使用(如果可用)功能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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。