Quelle est la différence entre CoCreateInstance () et CoGetClassObject () lors de la création d'objets sur le même ordinateur?

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

Question

Je comprends que CoCreateInstance trouve le serveur COM pour l'identifiant de classe donné, crée l'instance d'objet pour cet identifiant et récupère une interface à partir de cette instance d'objet. CoGetClassObject () trouve le serveur COM pour l'identifiant de classe, crée une instance de la fabrique de classes pour cet identifiant de classe et récupère l'interface de fabrique de classes qui peut ensuite être utilisée pour créer des objets réels.

En quoi ces fonctions diffèrent-elles lorsqu'elles sont utilisées pour créer des objets sur le même ordinateur? Travaillent-ils de la même manière mais ne provoquent que l'invocation de codes différents sur le même serveur COM?

Était-ce utile?

La solution

CoGetClassObject vous renvoie essentiellement un pointeur sur une fabrique pour une interface particulière. Sous le capot, CoCreateInstance utilise CoGetClassObject. L'appel à CoGetClassObject présente l'avantage de ne permettre de créer la fabrique de classes qu'une seule fois si vous souhaitez créer plusieurs occurrences d'un objet particulier.

La section MSDN sur CoGetClassObject décrit brièvement comment tirer parti de cette fonctionnalité.

Autres conseils

Un scénario en plus de ce que JaredPar a dit - CoGetClassObject vous renvoie une fabrique de classes (appelle la fonction exportée DLLGetClassObject de votre DLL dans le cas d’un serveur inproc). La classe factory est utilisée pour instancier coclass. CoCreateInstance appelle en interne CoGetClassObject, récupère la fabrique de classe requise, puis l'utilise pour instancier la coclasse demandée. Lorsque vous appelez CoCreateInstance, vous ne pouvez pas différer la création de la coclasse. Il arrive parfois que la création de coclass peut être coûteuse et que vous souhaitiez différer sa création tout en ayant accès à l’usine de classe afin de pouvoir instancier la coclass à la demande.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top