Проверьте, если DLL уже зарегистрирована
Я пытаюсь использовать функцию GetClassFile, передавая имя DLL в качестве параметра и ожидая, что функция вернет CLSID. Затем, используя CoCreateInstance, я мог бы проверить, зарегистрирована ли dll или нет.
Я не могу получить действительный доход за GetClassFile()
даже при прохождении зарегистрированной DLL.
HRESULT hr = GetClassFile((LPCOLESTR) "C:\\Program Files\\Common Files\\Microsoft Shared\\DAO\\dao360.dll", &clsid);
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>
ключ реестра).