我正在尝试使用GetClassFile函数将DLL名称作为参数传递并期望函数返回CLSID。然后使用CoCreateInstance,我可以检查dll是否已注册。
即使传递已注册的DLL,我也无法获得GetClassFile()
的有效返回。
HRESULT hr = GetClassFile((LPCOLESTR) "C:\\Program Files\\Common Files\\Microsoft Shared\\DAO\\dao360.dll", &clsid);
答案 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>
密钥。)