检查DLL是否已注册

时间:2012-03-08 04:42:48

标签: c++ registry clsid

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

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

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

1 个答案:

答案 0 :(得分:1)

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

您可以做的是调用LoadTypeLib()来检查DLL是否实现了类型库并检索其ITypeLib接口。如果成功,您可以调用其GetTypeInfoCount()GetTypeInfoType()GetTypeInfo()方法来查找和检索每个ITypeInfo对象的TKIND_COCLASS接口。对于每个ITypeInfo,您可以调用其GetTypeAttr()方法来检索其CLSID。完成后,您可以调用CoCreateInstance()请求IUnknown界面检查注册(或者您只需手动检查注册表的HKEY_CLASSES_ROOT\CLSID\<clsid>密钥。)