Udostępnij przez


Obiekty klasy COM i identyfikatory CLSID

Serwer COM jest implementowany jako klasa COM. klasy COM to implementacja grupy interfejsów w kodzie wykonywanym za każdym razem, gdy wchodzisz w interakcję z danym obiektem. Istnieje ważne rozróżnienie między klasą C++ a klasą COM: W języku C++klasa jest typem, podczas gdy klasa COM jest po prostu definicją obiektu i nie ma typu, chociaż programista języka C++ może go zaimplementować przy użyciu klasy C++. Model COM jest przeznaczony do umożliwienia używania klasy przez różne aplikacje, w tym aplikacji napisanych bez znajomości istnienia danej klasy. W związku z tym kod klasy dla danego typu obiektu istnieje w dynamicznej połączonej bibliotece (DLL) lub w innej aplikacji wykonywalnej (EXE).

Każda klasa COM jest identyfikowana przez CLSID, unikatowy 128-bitowy identyfikator GUID, który serwer musi zarejestrować. Com używa tego identyfikatora CLSID na żądanie klienta, aby skojarzyć określone dane z biblioteką DLL lub EXE zawierającą kod implementujący klasę, tworząc w ten sposób wystąpienie obiektu.

W przypadku klientów i serwerów na tym samym komputerze identyfikator CLSID serwera jest zawsze wymagany przez klienta. Na każdym komputerze com utrzymuje bazę danych (używa rejestru systemowego na platformach Microsoft Windows i Macintosh) wszystkich identyfikatorów CLSID dla serwerów zainstalowanych w systemie. Jest to mapowanie między poszczególnymi identyfikatorami CLSID i lokalizacją biblioteki DLL lub EXE, która zawiera kod dla tego identyfikatora CLSID. COM sprawdza tę bazę danych za każdym razem, gdy klient chce utworzyć wystąpienie klasy COM i korzystać z jej usług, więc klient nigdy nie musi znać bezwzględnej lokalizacji kodu na komputerze.

W przypadku systemów rozproszonych com udostępnia wpisy rejestru, które umożliwiają serwerowi zdalnemu zarejestrowanie się do użytku przez klienta. Aplikacje muszą znać tylko identyfikator CLSID serwera, ponieważ mogą polegać na rejestrze w celu zlokalizowania serwera, com umożliwia klientom zastępowanie wpisów rejestru i określanie lokalizacji serwera, aby w pełni wykorzystać sieć. (Zobacz lokalizowanie obiektu zdalnego.)

Podstawowym sposobem utworzenia wystąpienia klasy jest utworzenie obiektu klasy COM . Jest to po prostu obiekt pośredni, który obsługuje funkcje wspólne dla tworzenia nowych wystąpień danej klasy. Większość obiektów klasy używanych do tworzenia obiektów na podstawie identyfikatora CLSID obsługuje interfejs IClassFactory, interfejs zawierający ważne metody CreateInstance. Implementujesz interfejs IClassFactory dla każdej oferowanej klasy obiektu, która ma zostać utworzona. (Aby uzyskać więcej informacji na temat implementowania IClassFactory, zobacz ImplementowanieIClassFactory).

Nuta

Serwery obsługujące inny interfejs fabryki klas niestandardowych nie są wymagane do obsługi IClassFactory specjalnie. Jednak wywołania funkcji aktywacji innych niż CoGetClassObject (takich jak CoCreateInstanceEx) wymagają, aby serwer obsługiwał IClassFactory.

 

Gdy klient chce utworzyć wystąpienie obiektu serwera, używa identyfikatora CLSID żądanego obiektu w wywołaniu do CoGetClassObject. (To wywołanie może być bezpośrednie lub niejawne za pomocą jednej z funkcji pomocnika tworzenia obiektu). Ta funkcja lokalizuje kod skojarzony z identyfikatorem CLSID i tworzy obiekt klasy i dostarcza wskaźnik do żądanego interfejsu. (CoGetClassObject przyjmuje parametr riid, który określa żądany wskaźnik interfejsu klienta).

Nuta

COM ma tylko kilka funkcji, na których zbudowanych jest wiele innych. Najważniejszą z nich jest prawdopodobnie CoGetClassObject, która stanowi część wszystkich funkcji tworzenia wystąpienia.

 

Za pomocą tego wskaźnika obiekt wywołujący może utworzyć wystąpienie obiektu i pobrać wskaźnik do żądanego interfejsu w obiekcie. Jest to zazwyczaj interfejs inicjowania używany do aktywowania obiektu (umieść go w stanie uruchomienia), aby klient mógł wykonać dowolną pracę z obiektem, do którego chce. Korzystając z podstawowych funkcji modelu COM, klient musi również zadbać o zwolnienie wszystkich wskaźników obiektów.

Innym mechanizmem aktywowania wystąpień obiektów jest wywołanie nazwy klasy. Klasy monikers wiążą się z obiektem klasy klasy, dla której są tworzone. Aby uzyskać więcej informacji, zobacz Class Monikers.

Com udostępnia kilka funkcji pomocnika, które zmniejszają pracę tworzenia wystąpień obiektów. Są one opisane w funkcje pomocnika tworzenia wystąpień.

tworzenie obiektu za pomocą obiektu klasy