gpt4 book ai didi

c++ - 检查 DLL 是否已经注册

转载 作者:行者123 更新时间:2023-11-28 08:08:49 26 4
gpt4 key购买 nike

我正在尝试使用 GetClassFile 函数将 DLL 名称作为参数传递并期望该函数返回 CLSID。然后使用 CoCreateInstance,我可以检查 dll 是否已注册。

即使传递已注册的 DLL,我也无法获得 GetClassFile() 的有效返回值。

HRESULT hr = GetClassFile((LPCOLESTR) "C:\\Program Files\\Common Files\\Microsoft Shared\\DAO\\dao360.dll", &clsid);

最佳答案

GetClassFile()与 COM 无关。如果您阅读 documentation , 传递 DLL 文件名不会产生可以传递给 CoCreateInstance() 的 COM CLSID .它总是会失败并显示 MK_E_INVALIDEXTENSION错误。

您可以调用LoadTypeLib()检查 DLL 是否实现类型库并检索其 ITypeLib界面。如果成功,您可以调用其 GetTypeInfoCount() , GetTypeInfoType() , 和 GetTypeInfo()定位和检索 ITypeInfo 的方法每个接口(interface) TKIND_COCLASS目的。对于每个 ITypeInfo , 你可以调用它的 GetTypeAttr()检索其 CLSID 的方法.一旦你有了它,你就可以调用CoCreateInstance()请求 IUnknown检查注册的界面(或者您可以手动检查注册表的 HKEY_CLASSES_ROOT\CLSID\<clsid> 键)。

关于c++ - 检查 DLL 是否已经注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com