2009-05-05 14 views
5

Ben Cocreateınstance verilen sınıf kimliği için COM sunucusu bulur anlıyoruz ki kimliği için nesne örneğini oluşturur ve bu nesne örneğinden bir arabirim olarak alır. CoGetClassObject() sınıf kimliği için COM sunucusunu bulur, bu sınıf kimliği için sınıf fabrikasının bir örneğini oluşturur ve daha sonra gerçek nesneler oluşturmak için kullanılabilen bu sınıf arabirimini alır. Aynı makinede nesneleri oluşturmak için kullanıldığındaAynı makinede nesneler oluştururken CoCreateInstance() ve CoGetClassObject() arasındaki fark nedir?

başka nasıl bu işlevler farklıdır? Aynı şekilde çalışırlar, ancak aynı COM sunucusunda yalnızca farklı kodların çalıştırılmasına neden olurlar mı?

cevap

8

CoGetClassObject işlemi size esas belirli bir arayüz için bir fabrikaya bir işaretçi döndürür. Kaputun altında, CoCreateInstance CoGetClassObject kullanır. CoGetClassObject çağrısının avantajı, belirli bir nesnenin birçok örneğini oluşturmak istiyorsanız, yalnızca bir kez fabrika fabrika oluşturmanıza izin vermesidir.

CoGetClassObject MSDN bölüm, bu işlevsellik yararlanabilirsiniz nasıl kısa bir tartışma vardır.

+0

() çağrıları bunu okudum, ama ben CoGetClassObject haricinde herhangi bir yarar() potansiyel olarak daha hızlı olması ve sınıf fabrika nesne CreateInstance arasında durum devam edememek görmüyorum. – sharptooth

+1

@sharptooth, bu onun bir jüsü. Çok fazla avantaj değil, bu yüzden nadiren kullandığını görüyorsunuz. – JaredPar

+0

Bağımlılık arama sırası gibi bazı ince farklar var mıdır? Bu işlevler aynı şekilde çalışır, ancak aynı COM sunucusunda yalnızca farklı kodları çağırır mı? – sharptooth

1

Bir senaryo - CoGetClassObject işlemi size bir sınıf üreteci döndürür (DllGetclassObject inproc sunucu durumunda dll'inizin işlevini ihraç çağırır). Sınıf fabrikası, sınıfını örneklendirmek için kullanılır. CoCreateInstance, dahili olarak CoGetClassObject öğesini çağırır, gerekli sınıf fabrikasını alır ve daha sonra istediğiniz sınıfı oluşturmaya yarar. CoCreateInstance çağrıldığında, sınıfın oluşturulmasını geciktiremezsiniz. Sınıf oluşturmanın pahalı olabileceği ve yaratılmasını ertelemek isteyebileceğiniz, ancak yine de sınıf çalışmasına erişim sağlayabileceğiniz zamanlar vardır.

İlgili konular