В чем разница между CoCreateInstance() и CoGetClassObject() при создании объектов на одном компьютере?

StackOverflow https://stackoverflow.com/questions/824907

Вопрос

Я понимаю, что CoCreateInstance находит COM-сервер для данного идентификатора класса, создает экземпляр объекта для этого идентификатора и извлекает интерфейс из этого экземпляра объекта.CoGetClassObject() находит COM-сервер для идентификатора класса, создает экземпляр фабрики классов для этого идентификатора класса и извлекает этот интерфейс фабрики классов, который затем можно использовать для создания реальных объектов.

Чем еще эти функции отличаются при использовании для создания объектов на одной машине?Работают ли они одинаково, но вызывают вызов другого кода только на одном и том же COM-сервере?

Это было полезно?

Решение

CoGetClassObject по сути возвращает вам указатель на фабрику для определенного интерфейса.Под капотом CoCreateInstance используется CoGetClassObject.Преимущество вызова CoGetClassObject заключается в том, что он позволяет вам создать фабрику классов только один раз, если вы хотите создать много экземпляров определенного объекта.

В разделе MSDN CoGetClassObject содержится краткое обсуждение того, как можно воспользоваться этой функциональностью.

Другие советы

Один сценарий в дополнение к тому, что сказал JaredPar - CoGetClassObject возвращает вам фабрику классов (вызывает экспортированную функцию DLLGetClassObject вашей DLL в случае сервера inproc). Фабрика классов используется для создания экземпляров класса. CoCreateInstance внутренне вызывает CoGetClassObject, получает требуемую фабрику классов и затем использует ее для создания экземпляра запрошенного вами Coclass. Вызывая CoCreateInstance, вы не можете отложить создание кокласса. Временами создание coclass может быть дорогостоящим, и вы можете отложить его создание, но при этом иметь доступ к фабрике классов, чтобы можно было создать экземпляр класса по требованию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top