Funciones auxiliares de creación de instancias

En versiones anteriores de COM, el mecanismo principal usado para crear una instancia de objeto era la función CoCreateInstance . Esta función encapsula el proceso de creación de un objeto de clase, utilizando para crear una nueva instancia y liberar el objeto de clase. Otra función de este tipo es oleCreate más específica, el asistente de documentos compuestos OLE que crea un objeto de clase y recupera un puntero a un objeto solicitado.

Para suavizar el proceso de creación de instancias en sistemas distribuidos, COM ha introducido cuatro mecanismos importantes de creación de instancias:

Un moniker de clase permite identificar la clase de un objeto y se usa normalmente con otro moniker, como un moniker de archivo, para indicar la ubicación del objeto. Esto le permite enlazar a un objeto y especificar el servidor que se va a iniciar para ese objeto. Los monikers de clase también se pueden componer a la derecha de monikers que admiten el enlace a la interfaz IClassActivator . Para obtener más información, vea Clase Monikers.

CoCreateInstanceEx extiende CoCreateInstance para que sea posible crear un único objeto no inicializado asociado al CLSID especificado en un equipo remoto especificado. Además, en lugar de solicitar una sola interfaz y obtener un único puntero a esa interfaz, CoCreateInstanceEx permite consultar varias interfaces y (si está disponible) recibir punteros a ellas en un solo recorrido de ida y vuelta, lo que permite menos recorridos de ida y vuelta entre las máquinas. Esto puede hacer que la interacción de objetos remotos sea mucho más eficaz. Para ello, la función usa una matriz de estructuras de MULTI_QI .

La creación de un objeto mediante CoCreateInstanceEx todavía requiere que el objeto se inicialice a través de una llamada a una de las interfaces de inicialización (como IPersistStorage::Load). Las funciones auxiliares CoGetInstanceFromFile y CoGetInstanceFromIStorage encapsulan tanto la potencia de creación de instancias de CoCreateInstanceEx como la inicialización, la primera desde un archivo y la última desde un almacenamiento.

Crear un objeto a través de un objeto de clase