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>
реестра).