Каково различие между CoCreateInstance () и CoGetClassObject () при создании объектов на той же машине?

С предоставленными данными, я не думаю, что вам нужно делать что-то еще:

SELECT MAX(Datum), MAX(Stand)
FROM TableName
WHERE ID = @MyId

редактировать: вы хотите это по ID, вы можете сделать это:

SELECT MAX(Datum), MAX(Stand), ID
FROM TableName
GROUP BY ID
6
задан sharptooth 5 May 2009 в 14:06
поделиться

2 ответа

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

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

11
ответ дан 9 December 2019 в 20:48
поделиться

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

1
ответ дан 9 December 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: