检查DLL是否已注册
Check if a DLL is already registered
我正在尝试使用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>
键)。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 检查注册表项是否链接到(或副本)另一个注册表项
- 如何测试注册表项是否存在?
- 如何正确检查 c++ 是否存在注册表项?
- 是否有必要注册DLL来使用它
- 要在Windows上读取/设置用户屏幕保护程序,是否需要使用系统注册表或SystemParametersInfo API
- 有没有办法直接使用 RegGetValue() 检查注册表值是否存在
- 注册关键字是否仍在使用
- 是否可以从对象而不是类注册 QML 类型
- 是否可以使用 RegNotifyChangeKeyValue 来跟踪对注册表项值的更改
- 是否有必要在 Windows 注册表中转义字符串中的斜杠
- 在clCreateContext()中注册的回调中用C++抛出异常是否安全
- 检查DLL是否已注册
- 是否可以使用BOOST_PARAM_TEST_CASE在boost::test上进行自动注册?
- 是否有任何注册表项表明是否已经安装了特定的C运行时
- 在Windows Vista+上不注册proppage.dll,是否有方法访问远程过滤器图?
- 如何检查注册表中是否未设置(默认)值
- 我们是否应该在取消注册时删除观察者
- 如何确定dll是否已使用我的c++函数注册
- Libevent aerospike 客户端::是否可以在我的事件处理机制中注册 Aerospike FD