检查DLL是否已注册

Check if a DLL is already registered

本文关键字:注册 是否 DLL 检查      更新时间:2023-10-16

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

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

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

GetClassFile()与COM无关。如果您阅读文档,传递DLL文件名将不会生成可传递给CoCreateInstance()的COM CLSID。它总是会以MK_E_INVALIDEXTENSION错误而失败。

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