Проверьте, если 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> ключ реестра).

Другие вопросы по тегам