Aracılığıyla paylaş


COM Sınıf Nesneleri ve CLSID'ler

COM sunucusu, COM sınıfı olarak uygulanır. COM sınıfı, belirli bir nesneyle her etkileşime girdiğinizde yürütülen koddaki bir arabirim grubunun uygulamasıdır. C++ sınıfı ile COM sınıfı arasında önemli bir ayrım vardır: C++'da sınıf bir türdür; COM sınıfı ise yalnızca nesnenin tanımıdır ve hiçbir tür taşımaz, ancak C++ programcısı bunu C++ sınıfı kullanarak uygulayabilir. COM, belirli bir sınıfın varlığı hakkında bilgi sahibi olmadan yazılmış uygulamalar da dahil olmak üzere bir sınıfın farklı uygulamalar tarafından kullanılmasına izin verecek şekilde tasarlanmıştır. Bu nedenle, belirli bir nesne türü için sınıf kodu dinamik bağlantılı kitaplıkta (DLL) veya başka bir yürütülebilir uygulamada (EXE) bulunur.

Her COM sınıfı, sunucunun kaydetmesi gereken benzersiz bir 128 bit GUID CLSIDile tanımlanır. COM, belirli verileri sınıfını uygulayan kodu içeren DLL veya EXE ile ilişkilendirmek için istemcinin isteği üzerine bu CLSID'yi kullanır ve böylece nesnenin bir örneğini oluşturur.

Aynı bilgisayardaki istemciler ve sunucular için, sunucunun CLSID'si istemcinin ihtiyaç duyduğu tüm istemcidir. Her bilgisayarda COM, sistemde yüklü sunucular için tüm CLSID'lerin bir veritabanını (Microsoft Windows ve Macintosh platformlarında sistem kayıt defterini kullanır) tutar. Bu, her CLSID ile bu CLSID kodunu barındıran DLL veya EXE konumu arasındaki bir eşlemedir. COM, bir istemci com sınıfının bir örneğini oluşturmak ve hizmetlerini kullanmak istediğinde bu veritabanına başvurur, bu nedenle istemcinin bilgisayardaki kodun mutlak konumunu bilmesine asla gerek kalmaz.

Dağıtılmış sistemler için COM, uzak sunucunun kendisini bir istemci tarafından kullanılmak üzere kaydetmesine olanak sağlayan kayıt defteri girdileri sağlar. Uygulamaların yalnızca sunucunun CLSID'sini bilmesi gerekirken, sunucuyu bulmak için kayıt defterine güvenebilecekleri için COM istemcilerin ağdan tam olarak yararlanmak için kayıt defteri girdilerini geçersiz kılmasına ve sunucu konumlarını belirtmesine olanak tanır. (Bkz. uzak nesne bulma.)

Bir sınıfın örneğini oluşturmanın temel yolu, COMsınıf nesnesidir. Bu yalnızca belirli bir sınıfın yeni örneklerini oluşturmak için ortak işlevleri destekleyen bir ara nesnedir. BIR CLSID'den nesne oluşturmak için kullanılan çoğu sınıf nesnesi, önemli CreateInstance yöntemini içeren bir arabirim olan IClassFactory arabirimini destekler. Örneği oluşturulacak her nesne sınıfı için bir IClassFactory arabirimi uygularsınız. (IClassFactoryuygulama hakkında daha fazla bilgi için bkz. IClassFactoryUygulama .)

Not

IClassFactoryözel olarakbazı özel sınıf fabrika arabirimini destekleyen sunucular gerekli değildir. Ancak, CoGetClassObject (CoCreateInstanceExgibi) dışındaki etkinleştirme işlevlerine yapılan çağrılar, sunucunun IClassFactorydesteklemesini gerektirir.

 

İstemci sunucu nesnesinin bir örneğini oluşturmak istediğinde, coGetClassObjectçağrısında istenen nesnenin CLSID'sini kullanır. (Bu çağrı, nesne oluşturma yardımcı işlevlerinden biri aracılığıyla doğrudan veya örtük olabilir.) Bu işlev CLSID ile ilişkili kodu bulur ve bir sınıf nesnesi oluşturur ve istenen arabirime bir işaretçi sağlar. (CoGetClassObject, istemcinin istenen arabirim işaretçisini belirten bir riid parametresi alır.)

Not

COM'un, diğerlerinin birçoğunun derlendiği yalnızca birkaç işlevi vardır. Bunların en önemlileri büyük olasılıkla tüm örnek oluşturma işlevlerinin altında yer alan coGetClassObject.

 

Bu işaretçiyle, çağıran nesnenin bir örneğini oluşturabilir ve nesne üzerinde istenen arabirime yönelik bir işaretçi alabilir. Bu genellikle istemcinin istediği nesneyle her çalışmayı gerçekleştirebilmesi için nesneyi etkinleştirmek (çalışır duruma getirmek) için kullanılan bir başlatma arabirimidir. COM'un temel işlevlerini kullanarak istemcinin tüm nesne işaretçilerini serbest bırakmaya da dikkat etmesi gerekir.

Nesne örneklerini etkinleştirmeye yönelik başka bir mekanizma da sınıf takma adı üzerinden yapılır. Sınıf takma adlar, oluşturuldukları sınıfın sınıf nesnesine bağlanır. Daha fazla bilgi için bkz. Sınıf Takma Adlarını.

COM, nesne örnekleri oluşturma işini azaltan çeşitli yardımcı işlevler sağlar. Bunlar, Örnek Oluşturma Yardımcı İşlevleribölümünde açıklanmıştır.

Sınıf Nesnesi Aracılığıyla Nesne Oluşturma