Bileşen Nesne Modelini öğrenmek için en iyi yer [kapalı]


13

Mevcut projem için COM öğrenmem gerekiyor. Ben bir çaylağım ve COM için iyi bir başlangıç ​​noktası bulamadım. MSDN ve googling içine bakıyordum ... codeproject.com hakkında bazı ilginç makaleler buldum, ama memnun değilim. Neden COM kullanıyoruz? Neden var? Hangi yerlerde var? ..... ve benzerleri .. Öyleyse, lütfen bana bu soruların cevaplarını nerede bulabileceğimi söyler misiniz?


3
Neden COM kullanıyoruz? Çoğunlukla yapmamaya çalışıyoruz. Hangi yerlerde var? Genel olarak ağrılı eski kod tabanları.
Carson63000

@ carson actully i "COM" nesnelerinin değerlerini almak için gereken bir izleme yazılımı geliştiriyorum. Bu nedenle yeni bulunan Görev ..
Chani

1
Doğru hatırlıyorsam, COM en iyi 3 web makaleleri, 2 MSDN (bazı eski dergi makalesi) ve 1 CodeProject vardı ... Açıkçası yüzlerce başka biraz yararlı olanlar var, bu yüzden samanlıkta iğne bulmak gibi. (ve Google'a "COM" aradığımda yalnızca ".com"
TLD'sindeki

@ Carson63000 Öyle doğru acıyor ... şimdi bir köşede ağlayacak.
Evicatos

Yanıtlar:


18
  • İlk olarak, COM tıpkı nesne yönelimli programlama gibidir. COM arayüzü soyut bir arayüzdür.
  • COM, farklı dillerde uygulanmış ve / veya derleyicilerin farklı sürümleri tarafından derlenmiş COM sınıflarına sahip olabilmeniz ve her birinin kendi aralarında çalışabilmeleri için her dilin kendi yerleşik OOP'sine göre bir avantajı vardır. Buna "uygulama ikili arayüzü" (ABI) denir
  • COM referans sayımı kullanır. İlk başta sinir bozucu olabilir, ancak akıllı işaretçiler hakkında bilgi edinir öğrenmez hayatınız çok daha kolay olacak ve referans sayma kavramının anlaşılmasının çok kolay olduğunu göreceksiniz.
  • COM garip bir sınıf döküm kullanır, yani "Sorgu Arayüzü".

IUnknown'ı öğrenmek ilk adımdır.

Yeni başlayanlar için uygun olan iyi bir COM arayüzü IStream arayüzüdür. Veri depolamanın birçok yolunu kullanarak IStream arabirimini uygulayarak COM uygulaması yapabilirsiniz.


2012/09/28 eklendi:

COM mekanizması icat edildikten sonra Microsoft'taki insanlar bu mekanizmaların Ortodoks OOP olmayan sıra dışı programlama numaralarına kapı açtığını keşfettiler. En düşük seviyede, IUnknown.QueryInterfacesadece bir yöntemdir; her şeyi yapabilir. Bu hileler COM'u öğrencileri korkutuyor, çünkü OOP'tan ödünç alınabilecek temel akıl yürütmeyi geçersiz kılabilirler.

MSDN'deki Microsoft belgeleri, bu olağandışı püf noktalarının kodunuzu nasıl kırabileceğini açıklayan "COM değil ..." veya "Varsaymayın" diyerek çok zaman harcıyor.

COM tasarımcıları Liskov değiştirme prensibi ( "L" kullanın KATI temel cepten muhakeme veya program geçersiz hale olmadığından emin onların çoklu arayüzleri ve püf faydalanmak için).

Projeniz bu hileleri kullanmazsa, COM'u sadece OOP açısından görmek uygundur. Projeniz bu hileleri kullanıyorsa, COM'u kendi kendini değiştiren kod olarak görmeniz gerekir.

(Şaka: L ile o kadar çok zaman harcamak zorunda kaldık ki, tipik olarak diğer dört ilkeyi görmezden geldik.)


9

COM'un ana nedeni, bir uygulama ile diğer uygulamalar ve farklı bellek alanlarında yaşayabilecek dll'ler arasında ve farklı dahili nesne gösterimleri olabilecek nesneler arasında bir nesne yönelimli iletişim arabirimi sağlamaktır.

COM öğrenirken hatırlanması gereken bir şey, C ++ 'ın kral olduğu ve dll C denilen uygulamaların C kullanmasıdır.

Muhtemelen COM'u kullanmayı biraz daha kolaylaştıran görsel stüdyo için Aktif Şablon Kütüphanesi'ne (ATL) bir göz atmaya değer.

Gün içinde yararlı bulduğum birkaç kitap

http://www.amazon.com/Essential-COM-Don-Box/dp/0201634465/ref=sr_1_1?ie=UTF8&qid=1304946825&sr=8-1

http://www.amazon.com/Understanding-ActiveX-OLE-Developers-Technology/dp/1572312165/ref=pd_sim_b_4

hth


7

Başlangıçta COM hakkında DCOM Öğrenme kitabından öğrendim (DCOM sadece COM'un bir uzantısıdır, kitap çoğunlukla COM ile ilgilidir). On yaşından büyük ve kullanmanız gerekirse ucuz olmalı (COM, artık birlikte çalışma için kullanılsa bile Microsoft dünyasında bile artık tamamen sıcak değil).

COM'un var olmasının ana nedeni, bileşen tabanlı geliştirmeyi kolaylaştırmaktır, bu da temel olarak kodunuzu derlerken kitaplıkları bağlamak yerine bir arabirime (harici bir bileşenle nasıl iletişim kurulacağının açıklaması) başvurduğunuz ve konuşlandırdığınızda. Microsoft'un kendi teknolojisinin çoğunun temelini oluşturur.

Sistem, her şey yönetilmeden önce havalı olan bazı özellikleri (referans sayma ve kendi kendine açıklama (IDispatch aracılığıyla)) destekliyor.


5

COM, farklı yazılım parçalarının birbirleriyle konuşmasına izin vermek için 90'lı yıllarda oluşturulan bir standarttır. En önemlisi, bir yazılım parçasının bir nesneyi oluşturmasına veya bu nesneye bağlanmasına ve ardından bu arabirime çağrı yapmasına izin veren ikili standarttır. Bu, bir ASP sayfası (COM Nesneleri) tarafından çağrılabilen C ++ 'da DLL oluşturma veya Delphi'de VB iletişim kutusuna (ActiveX denetimleri) veya Excel çalışma sayfasına koyabileceğiniz bir denetim oluşturmanıza olanak tanır. Word'e bir resim yapıştırdığınızda, COM kullanarak ayrı bir uygulama word'e gömülür. Daha az popüler olan DCOM, uzak nesneleri çağırmaktır, bunu yapmak için genellikle daha basit yollar vardır.

Com / ActiveX / DCOM 10 yıl önce VB, VBA, C ++ / ATL, Delphi ile çok popülerdi. Dotnet olsa çok daha basit ve C # COM ve VB vb çoğu kullanımı yerini aldı

Hala bir dotnet uygulamasından veya Java veya C ++ 'dan aramak isteyebileceğiniz birçok COM arayüzü var. (Söylemiyorsun)

COM arayüzlerini çağırmanız gerekiyorsa VB bunu yapmanın en basit yoludur. Dotnet 4.0'da C #, IDispatch arabirimlerini çağırmayı çok daha kolaylaştıran dinamik anahtar kelimeye sahiptir, bu da muhtemelen bakmanız gereken harika bir çözümdür.

Çok fazla ayrıntı bilmeniz gerekiyorsa, gerçekten C ++ ve ATL kullanmanız gerekir, CoCreateInstance gibi C API'lerini arayın. Eski teknoloji olsa da çok fazla kullanmıyorsanız, bundan kaçının, yukarıdaki önerilere uyun.

Hangi izleme yazılımına baktığınızdan emin değilim ancak dotnet'teki System.Management sınıfları aracılığıyla kullanılabilir olması muhtemel değil.


2

Aşağıdakiler YG'ye genel bakış için yararlı olabilir:

İlk video, farklı dillerde yazılmış (dilden bağımsız) ve farklı makinelerde (süreçlerde) (konumdan bağımsız / şeffaf) kodları yeniden kullanmak için İkili Bileşenler oluşturma genel fikrinden bahseder. Bu teknoloji, bazı Yazılım Şirketlerinde, yazılımlarını satın almak ve bunları kendilerine gömmek veya sistemlerinde sıfırdan kod yazmak yerine diğer yazılımlarla (şirketlerle) bütünleştirmek için kullanılır.

Bu teknolojinin üç farklı sürümü (uygulama) vardır:

C ++ geliştiricileri için OLE / COM / DCOM / ActiveX (ATL, programcının işini kolaylaştırmak için kullanılır)

Java geliştiricileri için JavaBeans / RMI / EJB

CORBA / IIOP

Sadece yazılımınızı Java ile yazdığınızda kullanışlı olan bir teknoloji olarak düşünün ve ona zaten bir pakette bulunan bir işlev eklemek istiyorsunuz, ancak C ++ ile yazılmış ve hatta belki de farklı makinelerde bulunmuyor. yerel makineniz. Nasıl "yeni" diyorsunuz, onlardan nasıl nesne ve yöntem çağrıyorsunuz?

COM kodlaması yapan insanların gördüğüm aşağıdaki kitaplarında kitap raflarında bunlardan biri var:

  • COM ve ATL 3.0 için Geliştirici Atölyesi

  • Inside Com

  • Temel COM

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.