哪个DLL具有PathCchAppend?

时间:2019-08-05 08:32:58

标签: c++ winapi visual-c++ dll windows-shell

我正在尝试有条件地使用功能PathCchAppend(如果可用的话,则为 )。我从头文件# from sklearn official tutorial from sklearn.pipeline import Pipeline >>> text_clf = Pipeline([ ... ('vect', CountVectorizer()), ... ('tfidf', TfidfTransformer()), ... ('clf', MultinomialNB()), 中获得了函数签名。但是,当我尝试从pathcch.h获取函数的地址时,它失败了:

SHLWAPI.DLL

使用Depends,我发现此DLL中不存在此功能(我在Windows 10上)。不存在任何auto pca = GetProcAddress(GetModuleHandle(L"shlwapi.dll"), "PathCchAppend"); ,因此也无法加载它。

此功能放在哪个DLL中?

编辑: 多亏了答案。在这里,我找到了以下答案中提到的DLL名称:

https://docs.microsoft.com/en-us/windows/win32/apiindex/windows-81-api-sets

1 个答案:

答案 0 :(得分:3)

您可以使用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文件隐式链接要安全得多。