¿Cuál es la diferencia entre CoCreateInstance () y CoGetClassObject () al crear objetos en la misma máquina?

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

Pregunta

Entiendo que CoCreateInstance encuentra el servidor COM para la identificación de clase dada, crea la instancia de objeto para esa identificación y recupera una interfaz de esa instancia de objeto. CoGetClassObject () encuentra el servidor COM para la identificación de la clase, crea una instancia de la fábrica de clases para esa identificación de clase y recupera la interfaz de la fábrica de clases que luego puede usarse para crear objetos reales.

¿De qué otra manera difieren estas funciones cuando se usan para crear objetos en la misma máquina? ¿Funcionan de la misma forma pero solo hacen que se invoque un código diferente en el mismo servidor COM?

¿Fue útil?

Solución

CoGetClassObject esencialmente te devuelve un puntero a una fábrica para una interfaz en particular. Bajo el capó, CoCreateInstance usa CoGetClassObject. La ventaja de llamar a CoGetClassObject es que solo le permite tener que crear la fábrica de clases una vez si desea crear muchas instancias de un objeto en particular.

La sección de MSDN en CoGetClassObject tiene una breve discusión sobre cómo puede aprovechar esta funcionalidad.

Otros consejos

Un escenario además de lo que dijo JaredPar: CoGetClassObject le devuelve una fábrica de clases (llama a DLLGetClassObject la función exportada de su DLL en caso de un servidor inproc). Class factory se utiliza para instanciar coclass. CoCreateInstance llama internamente a CoGetClassObject, obtiene la fábrica de clases requerida y luego la usa para crear una instancia de la clase de cocas que solicitó. Al llamar a CoCreateInstance, no puede retrasar la creación de la clase. Hay ocasiones en que la creación de coclass puede ser costosa y usted querría retrasar su creación pero aún así tener acceso a la fábrica de clases, por lo que podría crear una instancia de coclass a pedido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top