Funções auxiliares de criação de instância

Em versões anteriores do COM, o mecanismo principal usado para criar uma instância de objeto era a função CoCreateInstance. Essa função encapsula o processo de criação de um objeto de classe, usando-o para criar uma nova instância e liberando o objeto de classe. Outra função desse tipo é o OleCreate mais específico, o auxiliar de documento composto OLE que cria um objeto de classe e recupera um ponteiro para um objeto solicitado.

Para facilitar o processo de criação de instâncias em sistemas distribuídos, a COM introduziu quatro novos e importantes mecanismos de criação de instâncias:

Um moniker de classe permite que você identifique a classe de um objeto e normalmente é usado com outro moniker, como um moniker de arquivo, para indicar o local do objeto. Isso permite que você vincule a um objeto e especifique o servidor que será iniciado para esse objeto. Os monikers de classe também podem ser compostos à direita de monikers que suportam a vinculação à interface IClassActivator. Para obter mais informações, consulte Monikers de classe.

CoCreateInstanceEx estende CoCreateInstance para tornar possível criar um único objeto não inicializado associado ao CLSID fornecido em uma máquina remota especificada. Além disso, em vez de solicitar uma única interface e obter um único ponteiro para essa interface, o CoCreateInstanceEx torna possível consultar várias interfaces e (se disponível) receber ponteiros para elas em uma única viagem de ida e volta, permitindo assim menos viagens de ida e volta entre máquinas. Isso pode tornar a interação com objetos remotos muito mais eficiente. Para fazer isso, a função usa uma matriz de estruturas MULTI_QI.

A criação de um objeto por meio de CoCreateInstanceEx ainda requer que o objeto seja inicializado por meio de uma chamada para uma das interfaces de inicialização (como IPersistStorage::Load). As funções auxiliares CoGetInstanceFromFile e CoGetInstanceFromIStorage encapsulam o poder de criação de instância de CoCreateInstanceEx e a inicialização, a primeira de um arquivo e a segunda de um armazenamento.

Criando um objeto por meio de um objeto de classe