Udostępnij za pośrednictwem


Pobieranie wskaźnika do obiektu

Ponieważ COM nie ma ścisłego modelu klas, istnieją cztery sposoby, aby klient mógł utworzyć instancję lub uzyskać wskaźnik do interfejsu dla obiektu:

  • Wywołaj funkcję biblioteki COM, która tworzy obiekt wstępnie określonego typu; oznacza to, że funkcja zwróci wskaźnik tylko do jednego określonego interfejsu dla określonej klasy obiektu.
  • Wywołaj funkcję biblioteki COM, która może utworzyć obiekt na podstawie identyfikatora klasy (CLSID) i zwraca dowolny typ żądanego wskaźnika interfejsu.
  • Wywołaj metodę interfejsu, która tworzy inny obiekt (lub łączy się z istniejącym) i zwraca wskaźnik interfejsu na tym oddzielnym obiekcie.
  • Zaimplementuj obiekt za pomocą interfejsu, za pomocą którego inne obiekty przekazują wskaźnik interfejsu bezpośrednio do klienta.

Aby uzyskać informacje na temat pobierania wskaźników do innych interfejsów w obiekcie po uzyskaniu pierwszego, zobacz QueryInterface: Nawigowanie po obiekcie.

Tworzenie obiektu wstępnie określonego typu

Istnieje wiele funkcji COM, takich jak CoGetMalloc, które zwracają wskaźniki do określonych implementacji interfejsu. (CoGetMalloc pobiera wskaźnik do standardowego alokatora pamięci COM). Większość z nich jest funkcjami pomocnika, a większość z tych funkcji jest opisana w sekcjach referencyjnych tej dokumentacji, w określonym obszarze, z jakim są związane, na przykład z magazynem lub transferem danych.

Tworzenie obiektu na podstawie identyfikatora CLSID

Istnieje kilka funkcji, które dla danego CLSID klient może wywołać, aby utworzyć wystąpienie obiektu i uzyskać wskaźnik do niego. Wszystkie te funkcje są oparte na funkcji CoGetClassObject, która tworzy obiekt klasy i dostarcza wskaźnik do interfejsu, który umożliwia tworzenie wystąpień tej klasy. Chociaż muszą istnieć informacje informujące, w którym systemie znajduje się serwer, nie ma potrzeby, aby te informacje były zawarte w kliencie. Klient musi znać tylko identyfikator CLSID i nigdy nie powinien znać ścieżki bezwzględnej kodu serwera. Aby uzyskać więcej informacji, zobacz Tworzenie obiektu za pomocą obiektu klasy.

Zwracanie wskaźnika do oddzielnego obiektu

Wśród wielu metod interfejsu, które zwracają wskaźnik do oddzielnego obiektu, jest kilka, które tworzą i zwracają wskaźnik do obiektu wyliczającego , co pozwala określić, ile elementów danego typu utrzymuje obiekt. COM definiuje interfejsy do wyliczania szerokiej gamy elementów, takich jak ciągi, ważne struktury, monikery i IUnknown wskaźniki interfejsu. Typowym sposobem utworzenia wystąpienia enumeratora i otrzymania wskaźnika do jego interfejsu jest wywołanie metody z innego interfejsu. Na przykład interfejs IDataObject definiuje dwie metody, EnumDAdvise i EnumFormatEtc, które zwracają wskaźniki do interfejsów w dwóch różnych obiektach wyliczania. Istnieje wiele innych przykładów w modelu COM metod, które zwracają wskaźniki do obiektów, takich jak interfejs dokumentu złożonego OLE IOleObject::GetClientSite, który po wywołaniu obiektu osadzonego lub połączonego zwraca wskaźnik do implementacji obiektu kontenera IOleClientSite.

Implementowanie obiektu, za pomocą którego można przekazać wskaźnik interfejsu bezpośrednio do klienta

Gdy dwa obiekty, takie jak kontener dokumentów złożonych OLE i serwer, wymagają komunikacji dwukierunkowej, każdy implementuje obiekt zawierający metodę interfejsu, za pomocą której może przekazać wskaźnik interfejsu do innego obiektu. Obiekt implementujący, który jest również klientem utworzonego obiektu, może następnie wywołać metodę i pobrać wskaźnik, który został przekazany.

klientów COM i serwerów

obowiązki serwera COM