我正在尝试有条件地使用功能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
答案 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文件隐式链接要安全得多。