Qual é a diferença entre o coCreateInstance () e o coGetClassObject () ao criar objetos na mesma máquina?

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

Pergunta

Entendo que o CocreateInstance encontra o servidor COM para o ID da classe especificado, cria a instância do objeto para esse ID e recupera uma interface dessa instância do objeto. O coGetClassObject () encontra o servidor COM para o ID da classe, cria uma instância da fábrica de classe para esse ID da classe e recupera a interface da fábrica de classe que pode ser usada para criar objetos reais.

De que outra forma essas funções diferem quando usadas para criar objetos na mesma máquina? Eles funcionam da mesma maneira, mas apenas fazem com que o código diferente seja invocado no mesmo servidor com?

Foi útil?

Solução

O coGetClassObject retorna essencialmente um ponteiro para uma fábrica para uma interface específica. Sob o capô, o CocreateInstance usa o CogetClassObject. A vantagem de chamar o CogetClassObject é que ele permite que você só precise criar a fábrica de classe uma vez se você quiser criar muitas instâncias de um objeto específico.

A seção MSDN sobre CogetClassObject tem uma breve discussão sobre como você pode tirar proveito dessa funcionalidade.

Outras dicas

Um cenário, além do que Jaredpar disse - o CogetClassObject retorna a você uma fábrica de classe (chama a função exportada DllgetClassObject da sua DLL em caso de servidor inproc). A fábrica de classe é usada para instanciar coclasse. O CocreateInstance chama internamente o CogetClassObject, obtém a fábrica de classe necessária e o usa para instanciar o coclass que você solicitou. Ao chamar o coCreateInstance, você não pode atrasar a criação do coclasse. Há momentos em que a criação de coclass pode ser cara e você deseja adiar sua criação, mas ainda tem acesso à fábrica de classe para que você possa instanciar o coclás sob demanda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top