Проблема в том, что вы путаете объект класса и сам объект. CoGetClassObject
даст вам указатель на объект, который реализует IClassFactory
и предназначен для создания экземпляра интересующего вас объекта. Это не фактический экземпляр этого объекта.
В вашем примере вы получаете указатель IUnknown
, вызывая QueryInterface
на указателе IClassFactory
. Этот указатель по-прежнему указывает на экземпляр объекта класса, следовательно, выполнение QueryInterface
для интерфейса, который вас интересует, приводит к ошибке. Вместо этого вам нужно вызвать IClassFactory::Createinstance
, чтобы получить указатель IUnknown
на фактический объект и выполнить QueryInterface
для этого указателя.