Qual è la differenza tra CoCreateInstance () e CoGetClassObject () quando si creano oggetti sulla stessa macchina?

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

Domanda

Comprendo che CoCreateInstance trova il server COM per l'ID classe specificato, crea l'istanza dell'oggetto per quell'id e recupera un'interfaccia dall'istanza oggetto. CoGetClassObject () trova il server COM per l'id di classe, crea un'istanza del factory di classe per quell'id di classe e recupera quell'interfaccia del factory di classe che può quindi essere utilizzata per creare oggetti reali.

In che altro modo queste funzioni differiscono quando utilizzate per creare oggetti sulla stessa macchina? Funzionano allo stesso modo ma provocano solo codice diverso da invocare nello stesso server COM esattamente?

È stato utile?

Soluzione

CoGetClassObject essenzialmente restituisce un puntatore a una factory per una particolare interfaccia. Sotto il cofano, CoCreateInstance utilizza CoGetClassObject. Il vantaggio di chiamare CoGetClassObject è che ti permette di creare la classe factory solo una volta se vuoi creare molte istanze di un particolare oggetto.

La sezione MSDN su CoGetClassObject presenta una breve discussione su come sfruttare questa funzionalità.

Altri suggerimenti

Uno scenario in aggiunta a ciò che ha detto JaredPar: CoGetClassObject restituisce un factory di classe (chiama DLLGetClassObject ha esportato la funzione della tua DLL in caso di server inproc). Class factory viene utilizzato per creare un'istanza di coclasse. CoCreateInstance chiama internamente CoGetClassObject, ottiene il factory di classe richiesto e quindi lo utilizza per creare un'istanza della coclasse richiesta. Quando si chiama CoCreateInstance, non è possibile ritardare la creazione della coclasse. Ci sono momenti in cui la creazione di coclasse potrebbe essere costosa e si vorrebbe ritardare la sua creazione ma avere comunque accesso alla fabbrica di classe in modo da poter istanziare la coclasse su richiesta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top