Condividi tramite


Funzioni helper per la creazione di istanze

Nelle versioni precedenti di COM, il meccanismo principale usato per creare un'istanza di oggetto era la funzione CoCreateInstance. Questa funzione incapsula il processo di creazione di un oggetto classe, utilizzando tale oggetto per creare una nuova istanza e rilasciare l'oggetto classe. Un'altra funzione di questo tipo è oleCreate più specifica, l'helper del documento composto OLE che crea un oggetto classe e recupera un puntatore a un oggetto richiesto.

Per uniformare il processo di creazione di istanze nei sistemi distribuiti, COM ha introdotto quattro importanti meccanismi di creazione di nuove istanze:

Un moniker di classe consente di identificare la classe di un oggetto ed è in genere usato con un altro moniker, ad esempio un moniker di file, per indicare la posizione dell'oggetto. In questo modo è possibile eseguire l'associazione a un oggetto e specificare il server da avviare per tale oggetto. I moniker di classe possono anche essere composti a destra dei moniker che supportano l'associazione all'interfaccia IClassActivator . Per altre informazioni, vedere Moniker di classe.

CoCreateInstanceEx estende CoCreateInstance per consentire la creazione di un singolo oggetto non inizializzato associato al CLSID specificato in un computer remoto specificato. Inoltre, invece di richiedere una singola interfaccia e ottenere un singolo puntatore a tale interfaccia, CoCreateInstanceEx consente di eseguire query per più interfacce e (se disponibile) di ricevere puntatori in un singolo round trip, consentendo così un minor numero di round trip tra i computer. Ciò può rendere l'interazione remota degli oggetti molto più efficiente. A tale scopo, la funzione usa una matrice di strutture MULTI_QI.

La creazione di un oggetto tramite CoCreateInstanceEx richiede comunque l'inizializzazione dell'oggetto tramite una chiamata a una delle interfacce di inizializzazione, ad esempio IPersist Archiviazione::Load. Le funzioni helper CoGetInstanceFromFile e CoGetInstanceFromI Archiviazione incapsulano sia la potenza di creazione dell'istanza di CoCreateInstanceEx che l'inizializzazione, la prima da un file e la seconda da un archivio.

Creazione di un oggetto tramite un oggetto classe