Kısaca COM (Bileşen Nesne Modeli) nedir? [kapalı]


89

Görünüşe göre COM nesneleri, işletim sistemi tarafından yönetilen genel kullanım nesneleridir. Nesneler katı bir arayüz izler ve bilgileri belirlemek için nesneleri sorgulamanıza izin verir. COM nesneleri bu mu?

c++  com 

Yanıtlar:


112

COM , bileşeni uygulayan programcı ve onu kullanan programcı tarafından kullanılan dillerden bağımsız olarak ve bileşenin istemcinin programında uygulanıp uygulanmadığından bağımsız olarak nesnelerin (veya bileşenlerin) yeniden kullanımına izin veren bir mekanizmadır. makinenin (veya ağın) başka bir yerinde.

Genel olarak konuşursak, her COM bileşeni, bir veya daha fazla arayüzün uygulanmasını sağlar. Bu arayüzler, Arayüz Tanım Dili (IDL) kullanılarak dilden bağımsız bir şekilde tanımlanır . Örnek olarak, COM'daki temel arayüzlerden biri olan IUnknown şöyle tanımlanır:

interface IUnknown
{
   virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) = 0;
   virtual ULONG AddRef(void) = 0;
   virtual ULONG Release(void) = 0;
};

Her COM bileşeni, çünkü bu küçük arayüzü, COM esastır gerekir onu yerine getirirler. COM makinelerinin iki önemli yönünü tanımlar:

  • QueryInterfacebilinen bir arabirim için bir uygulama almak için kod çağırmaya izin verir. COM'da, arabirimler GUID'ler (Arabirim Tanımlayıcıları, IID olarak da bilinir) tarafından referans alınır. Bir nesne birkaç arabirim uygularsa, istemci kodu bu arabirimlerin her birine böyle bir başvuru alır. İsterseniz bir tür döküm operatörü görevi görür.
  • AddRef()ve Release()COM nesneleri için bellek yönetimi mekanizmasını uygulayın. Adından da anlaşılacağı gibi, en yaygın model, son müşteri referansını yayınladıktan sonra bir örneğin yok edildiği referans sayma mekanizmasıdır.

Tüm COM bileşenleri, kurulumun ardından sisteme kaydedilir. Bir programcı belirli bir bileşeni kullanmak isterse, şunları yapması gerekir:

  • Bileşenin ulaşılabilir bir yere kurulduğundan emin olun. Çoğu zaman çalışan uygulamanın sistemindedir, ancak COM + bileşenlerin uzak bilgisayarlarda var olmasına da izin verir.
  • Verilen bileşenin GUID'ini öğrenin. Bu GUID ile istemci daha sonra sistemden bileşeni başlatmasını isteyebilir (C'de bunu yapacak işlev çağrılır CoCreateInstance()). Kayıt defterine bakabilirsiniz HKEY_CLASSES_ROOT\CLSID: İçindeki her GUID (büyük olasılıkla) bir COM bileşeni veya arabirimi için bir tanımlayıcıdır ve bu anahtarın altındaki girişler, sisteme nasıl tasarlanması gerektiğini söyler.

COM makineleri son derece karmaşıktır. Örneğin, C'de COM bileşenlerini uygulamak veya kullanmak korkunç miktarda çalışma gerektirir, ancak Visual Basic gibi daha yüksek seviyeli diller COM bileşenlerinin uygulanmasını ve kullanımını kolaylaştırmak için çok şey yaptı. Ancak faydalar çok gerçektir. Örneğin, Visual Basic'te bir uygulama yazmayı mümkün kılar, ancak C veya C ++ 'daki performans açısından kritik algoritmaları, doğrudan VB kodundan kullanılabilen COM nesneleri olarak uygulamaya devam eder. Sistem , istemci kodunun normal bir nesne kullanıyormuş gibi bir izlenime sahip olması için gerektiğinde bunları iş parçacıkları, süreçler ve ağ bağlantılarından geçirerek yöntem çağrısı argümanlarını sıralayarak ilgilenir .

Windows'un birçok temel parçası COM'a dayanmaktadır. Örneğin Windows Gezgini (dosya yöneticisi) temelde boş bir kabuktur. Ağaç hiyerarşilerinde gezinmek ve görüntülemek için bir dizi COM Arabirimi tanımlar ve "Bilgisayarım" ı, sürücüleri, klasörleri ve dosyaları görüntüleyen tüm kod, bu arabirimleri uygulayan bir COM bileşenleri kümesi gibidir.

.NET'in gelişiyle, COM yavaş yavaş modası geçmiş hale geliyor.


10
Son satırın kaynağı?
Shad

32

COM, arayan kişi başka bir satıcının C ++ derleyicisini veya (nihayetinde) tamamen farklı bir dili kullanıyor olsa bile, kişilerin yeniden kullanılabilecek ikili dosyaları dağıtmasına izin vermek için geliştirilmiş bir mekanizmadır.

COM'a iyi bir giriş istiyorsanız, Essential COM by Don Box'ı okuyun .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.