Co to jest COM (Component Object Model) w skrócie? [Zamknięte]


89

Wygląda na to, że obiekty COM są obiektami ogólnego użytku, którymi zarządza system operacyjny. Obiekty są zgodne ze ścisłym interfejsem i umożliwiają wysyłanie zapytań do obiektów w celu określenia informacji. Czy to są obiekty COM?

c++  com 

Odpowiedzi:


111

COM to mechanizm, który pozwala na ponowne wykorzystanie obiektów (a raczej komponentów), niezależnie od języków używanych przez programistę, który zaimplementował komponent i programistę, który go używa oraz niezależnie od tego, czy komponent został zaimplementowany w programie klienta, czy też w innym miejscu na komputerze (lub w sieci).

Mówiąc ogólnie, każdy składnik COM zapewnia implementację jednego lub większej liczby interfejsów. Te interfejsy są definiowane w sposób neutralny językowo przy użyciu języka definicji interfejsu (IDL) . Na przykład jeden z podstawowych interfejsów COM, IUnknown , jest zdefiniowany w następujący sposób:

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

Ten mały interfejs ma fundamentalne znaczenie w COM, ponieważ każdy składnik COM musi go implementować. Definiuje dwa ważne aspekty maszyny COM:

  • QueryInterfaceumożliwia wywołanie kodu w celu uzyskania implementacji dla znanego interfejsu. W modelu COM do interfejsów odwołują się identyfikatory GUID (znane również jako identyfikatory interfejsów, IID). Jeśli obiekt implementuje kilka interfejsów, w ten sposób kod klienta otrzymuje odniesienie do każdego z tych interfejsów. Działa jak rodzaj operatora odlewania, jeśli wolisz.
  • AddRef()i Release()zaimplementuj mechanizm zarządzania pamięcią dla obiektów COM. Jak sama nazwa wskazuje, najpopularniejszym modelem jest mechanizm zliczania referencji, w którym instancja jest niszczona po tym, jak ostatni klient udostępnił jej referencję.

Wszystkie składniki COM są rejestrowane w systemie podczas instalacji. Jeśli programista chce użyć jakiegoś komponentu, musi:

  • Upewnij się, że komponent jest zainstalowany w dostępnym miejscu. Przez większość czasu znajduje się w systemie uruchomionej aplikacji, ale COM + umożliwia również istnienie składników na komputerach zdalnych.
  • Znać identyfikator GUID danego komponentu. Dzięki temu identyfikatorowi GUID klient może następnie poprosić system o utworzenie wystąpienia komponentu (w języku C wywoływana jest funkcja, która to robi CoCreateInstance()). Możesz zajrzeć do rejestru pod następującymi punktami HKEY_CLASSES_ROOT\CLSID: każdy identyfikator GUID tam znajduje się (najprawdopodobniej) identyfikator komponentu COM lub interfejsu, a wpisy poniżej tego klucza informują system, w jaki sposób należy go uruchomić.

Maszyny COM są niezwykle złożone. Na przykład implementacja lub używanie komponentów COM w C wymaga ogromnej ilości pracy, ale języki wyższego poziomu, takie jak Visual Basic, zrobiły wiele, aby ułatwić implementację i używanie komponentów COM. Korzyści są jednak bardzo realne. Umożliwia pisanie aplikacji, powiedzmy, w języku Visual Basic, ale nadal implementować algorytmy krytyczne dla wydajności w C lub C ++ jako obiekty COM, które mogą być używane bezpośrednio z kodu VB. System dba o uporządkowanie argumentów wywołania metody, przekazując je w razie potrzeby przez wątki, procesy i połączenia sieciowe, tak aby kod klienta miał wrażenie używania normalnego obiektu.

Wiele podstawowych części systemu Windows jest opartych na modelu COM. Na przykład Eksplorator Windows (menedżer plików) jest w zasadzie pustą powłoką. Definiuje kilka interfejsów COM do nawigacji i wyświetlania hierarchii drzew, a cały kod, który faktycznie wyświetla "Mój komputer", dyski, foldery i pliki jest zestawem komponentów COM, które implementują te interfejsy.

Wraz z pojawieniem się .NET COM powoli staje się przestarzały.


10
Źródło ostatniej linii?
— Shad

32

COM to mechanizm, który został opracowany, aby umożliwić ludziom dystrybucję plików binarnych, które mogą być ponownie użyte, nawet jeśli wywołujący używał kompilatora C ++ innego producenta lub (ostatecznie) zupełnie innego języka.

Jeśli chcesz dobrego wprowadzenia do COM, przeczytaj Essential COM autorstwa Don Boxa .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.