Najlepsze miejsce do nauki Component Object Model [zamknięte]

13

Muszę nauczyć się COM dla mojego obecnego projektu. Jestem noobem i nie byłem w stanie znaleźć dobrych punktów wyjścia do COM. Patrzyłem na MSDN i googling ... Znalazłem kilka ciekawych artykułów na codeproject.com, ale nie jestem zadowolony. Dlaczego używamy COM? Dlaczego to istnieje? W jakich miejscach to istnieje? ..... itd. Czy możesz mi powiedzieć, gdzie mogę znaleźć odpowiedzi na te pytania?

Chani
źródło
3
Dlaczego używamy COM? Przeważnie staramy się tego nie robić. W jakich miejscach to istnieje? Bolesne starsze podstawy kodu, ogólnie.
Carson63000,
@carson actully Rozwijam oprogramowanie monitorujące, w którym muszę pobrać wartości obiektów „COM”. Stąd nowy znaleziony Quest ..
Chani,
1
Jeśli dobrze pamiętam, z 3 najlepszych artykułów internetowych na temat COM, 2 było na MSDN (jakiś stary artykuł w magazynie), a 1 na CodeProject ... oczywiście są setki innych, nieco przydatnych, więc to jest jak znalezienie igły w stogu siana. (i dziękuję Google za zwrócenie tylko stron w
domenie
@ Carson63000 Tak prawda, że ​​to boli ... idę teraz płakać w kącie.
Evicatos,

Odpowiedzi:

18
  • Po pierwsze, COM jest jak programowanie obiektowe. Interfejs COM jest interfejsem abstrakcyjnym.
  • COM ma przewagę nad wbudowanym OOP każdego języka pod tym względem, że można zaimplementować klasy COM w różnych językach i / lub skompilować za pomocą różnych wersji kompilatorów, i nadal będą mogły współpracować. Nazywa się to „aplikacyjnym interfejsem binarnym” (ABI)
  • COM wykorzystuje zliczanie referencji. Na początku może to być denerwujące, ale gdy tylko poznasz inteligentne wskaźniki, twoje życie będzie znacznie łatwiejsze i przekonasz się, że pojęcie liczenia referencji jest bardzo łatwe do zrozumienia.
  • COM wykorzystuje dziwny sposób rzutowania klas, a mianowicie „Interfejs zapytań”.

Nauka IUnknown to pierwszy krok.

Dobrym interfejsem COM odpowiednim do nauki dla początkujących jest interfejs IStream. Możesz ćwiczyć COM, wdrażając interfejs IStream przy użyciu wielu różnych sposobów przechowywania danych.


Dodano 2012/09/28:

Po wynalezieniu mechanizmu COM ludzie w firmie Microsoft odkryli, że mechanizmy te otwierają drzwi do niezwykłych sztuczek programistycznych, które nie są ortodoksyjnymi operacjami operacyjnymi. Na najniższym poziomie IUnknown.QueryInterfacejest tylko metodą; może zrobić wszystko. Te sztuczki sprawiają, że COM jest zastraszające dla uczniów, ponieważ mogą unieważnić podstawowe rozumowanie, które można pożyczyć od OOP.

Dokumentacja Microsoft w MSDN spędza dużo czasu mówiąc „COM nie jest ...” lub „Nie zakładaj” wyjaśniając, w jaki sposób te niezwykłe sztuczki mogą złamać Twój kod.

Projektanci COM używają Liskov Substitution Principle („L” w SOLID ), aby upewnić się, że ich liczne interfejsy i użycie sztuczek nie unieważniają podstawowego rozumowania OOP lub działania programu.

Jeśli twój projekt nie używa tych sztuczek, możesz zobaczyć COM tylko z punktu widzenia OOP. Jeśli twój projekt używa tych sztuczek, będziesz musiał zobaczyć COM jako kod samodmodyfikujący.

(Żart: Musieliśmy spędzać tyle czasu z L, że zwykle ignorujemy cztery pozostałe zasady.)

rwong
źródło
9

Głównym powodem modelu COM jest zapewnienie zorientowanego obiektowo interfejsu komunikacyjnego między aplikacją a innymi aplikacjami i bibliotekami DLL, które mogą znajdować się w różnych przestrzeniach pamięci oraz między obiektami, które mogą mieć różne wewnętrzne reprezentacje obiektów.

Podczas uczenia się COM należy pamiętać, że w tym czasie C ++ był królem, a aplikacje nazywane dll używają C. Nie było wspólnego ABI (jak mówi @rwong), a COM było rozwiązaniem Microsoft.

Prawdopodobnie warto zajrzeć do Active Template Library (ATL) dla studia wizualnego, co sprawia, że ​​nieco łatwiej jest również korzystać z COM.

Kilka książek, które uznałem za przydatne w ciągu dnia

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

daven11
źródło
7

Pierwotnie nauczyłem się o COM z książki Learning DCOM (DCOM to tylko rozszerzenie COM, książka głównie o COM). Ma ponad dziesięć lat i powinien być tani, jeśli go wykorzystasz (ponieważ COM nie jest już tak naprawdę gorący, nawet w świecie Microsoft, nawet jeśli jest nadal używany do interopu).

Głównym powodem istnienia modelu COM jest ułatwienie rozwoju opartego na komponentach, co w zasadzie oznacza, że ​​zamiast łączyć biblioteki podczas kompilowania kodu, odwołujesz się do interfejsu (opis sposobu komunikowania się z komponentem zewnętrznym) i używasz pewnej implementacji że podczas wdrażania. Stanowi podstawę większości własnych technologii Microsoft.

System obsługuje niektóre funkcje, które były fajne, zanim wszystko się zarządzało (takie jak liczenie referencji i samoopisanie (przez IDispatch)).

Deckard
źródło
5

COM to standard stworzony w latach 90., aby umożliwić różnym programom komunikowanie się ze sobą. Najważniejszy jest standard binarny, który pozwala jednemu oprogramowaniu utworzyć obiekt lub powiązać go z obiektem, a następnie wywołać ten interfejs. Pozwala to na tworzenie bibliotek DLL w C ++, które mogą być wywoływane przez stronę ASP (obiekty COM), lub tworzenie kontrolki w Delphi, którą można umieścić w oknie dialogowym VB (formanty ActiveX) lub arkuszu programu Excel. Kiedy wklejasz obraz do Worda, używa on również COM, osadzając osobną aplikację w Word. Mniej popularna jest metoda DCOM, która ma wywoływać obiekty zdalne, zwykle są to prostsze sposoby.

Więc Com / ActiveX / DCOM był bardzo popularny 10 lat temu z VB, VBA, C ++ / ATL, Delphi. Dotnet jest jednak znacznie prostszy, a C # zastąpił większość zastosowań COM i VB itp

Wciąż istnieje wiele interfejsów COM, które można wywołać z aplikacji dotnet lub Java lub C ++. (Nie mówisz)

Jeśli potrzebujesz wywołać interfejsy COM, VB to najprostszy sposób, aby to zrobić. W Dotnet 4.0 C # ma dynamiczne słowo kluczowe, które znacznie ułatwia wywoływanie interfejsów IDispatch, co jest prawdopodobnie doskonałym rozwiązaniem, na które powinieneś spojrzeć.

Jeśli chcesz poznać wiele szczegółów, naprawdę potrzebujesz C ++ i ATL, wywołaj interfejsy API C, takie jak CoCreateInstance. Unikaj tego, jeśli potrafisz jako stara technologia i nie ma większego zastosowania, trzymaj się powyższych zaleceń.

Nie jestem pewien, na jakie oprogramowanie monitorujące się patrzysz, ale prawdopodobnie będzie ono dostępne za pośrednictwem klas System.Management w dotnet.

Richard
źródło
2

Poniższe informacje mogą być przydatne w przeglądzie COM:

Pierwsze wideo mówi o ogólnej idei tworzenia komponentów binarnych w celu ponownego wykorzystania kodów napisanych w różnych językach (niezależnych od języka) i znajdujących się w różnych maszynach (procesach) (niezależne od lokalizacji / przezroczyste). Ta technologia jest wykorzystywana w niektórych firmach programistycznych do integracji z innym oprogramowaniem (firmami) zamiast kupowania ich oprogramowania i osadzania ich we własnym oprogramowaniu lub pisania kodów od zera w ich systemach.

Ta technologia ma trzy różne wersje (implementacje):

OLE / COM / DCOM / ActiveX dla programistów C ++ (ATL służy do ułatwienia pracy programisty)

JavaBeans / RMI / EJB dla programistów Java

CORBA / IIOP

Pomyśl o tym jako o technologii, która jest przydatna, gdy masz oprogramowanie napisane w Javie i chcesz dodać do niego funkcjonalność, która już istnieje w pakiecie, ale jest napisana w C ++, a nawet może znajduje się na innym komputerze, a nie w Twoja lokalna maszyna. Jak nazywasz „nowy”, jak tworzysz obiekty i wywołujesz z nich metody?

Następujące książki, które widziałem ludzi, którzy kodują COM, mają jedno z nich na swoich półkach:

  • Warsztat programisty na COM i ATL 3.0

  • Inside Com

  • Essential COM

Mahshid Zeinaly
źródło