Was ist der Unterschied zwischen Cocrreateinstance () und cogetClassObject () beim Erstellen von Objekten auf derselben Maschine?

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

Frage

Ich verstehe, dass Cocrreateinstance den COM -Server für die angegebene Klassen -ID findet, die Objektinstanz für diese ID erstellt und eine Schnittstelle aus dieser Objektinstanz abruft. CogetClassObject () findet den COM -Server für die Klassen -ID, erstellt eine Instanz der Klassenfabrik für diese Klassen -ID und ruft diese Klassenfabrikoberfläche ab, die dann zum Erstellen tatsächlicher Objekte verwendet werden kann.

Wie unterscheiden sich diese Funktionen sonst, wenn sie verwendet werden, um Objekte auf derselben Maschine zu erstellen? Arbeiten sie auf die gleiche Weise, lassen aber nur einen anderen Code auf dem gleichen COM -Server aufzurufen?

War es hilfreich?

Lösung

CogetClassObject gibt Ihnen im Wesentlichen einen Zeiger auf eine Fabrik für eine bestimmte Schnittstelle zurück. Unter der Motorhaube verwendet Cocrreateinstance CogetClassObject. Der Vorteil des Aufrufens von CogetClassObject besteht darin, dass Sie die Klassenfabrik nur einmal erstellen müssen, wenn Sie viele Instanzen eines bestimmten Objekts erstellen möchten.

Der MSDN -Abschnitt über CogetClassObject enthält eine kurze Diskussion darüber, wie Sie diese Funktionalität nutzen können.

Andere Tipps

Ein Szenario zusätzlich zu dem, was Jaredpar sagte - CogetClassObject gibt Ihnen eine Klassenfabrik zurück (nennt die exportierte Funktion von DLLGetClassObject bei INPROC -Server exportierte Funktion Ihrer DLL). Die Klassenfabrik wird verwendet, um Koklass zu instanziieren. Cocrreateinstance ruft intern CogetClassObject an, erhält die erforderliche Klassenfabrik und verwendet sie dann, um die von Ihnen angeforderte Koklass zu instanziieren. Wenn Sie Cocrreateinstance nennen, können Sie die Schaffung der Koklass nicht verzögern. Es gibt Zeiten, in denen die Schaffung von Koklass teuer sein könnte und Sie ihre Schöpfung verzögern möchten, aber dennoch Zugang zur Klassenfabrik haben, damit Sie die Koklass auf Demand instanziieren können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top