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?


źródło

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.

Carl Seleborg
źródło
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 .

McDowell
źródło