0

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

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

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

1 回答 1

1

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

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

于 2012-03-08T06:21:35.570 回答