Udostępnij za pośrednictwem


Podstawowe informacje na temat obiektów COM ATL

Poniższa ilustracja przedstawia relację między klasami i interfejsami, które są używane do definiowania obiektu COM ATL.

Diagram klas i interfejsów używanych do definiowania obiektu A T L.

Uwaga

Na tym diagramie pokazano, że CComObject pochodzi z CYourClass funkcji , CComPolyObject a CComAggObject element jest dołączany CYourClass jako zmienna składowa.

Istnieją trzy sposoby definiowania obiektu COM ATL. Standardową opcją jest użycie CComObject klasy, która pochodzi z CYourClassklasy . Drugą opcją jest utworzenie zagregowanego obiektu przy użyciu CComAggObject klasy . Trzecią opcją CComPolyObject jest użycie klasy . CComPolyObject działa jako hybryda: może działać jako CComObject klasa lub jako CComAggObject klasa, w zależności od tego, jak jest tworzony po raz pierwszy. Aby uzyskać więcej informacji na temat używania CComPolyObject klasy, zobacz Klasa CComPolyObject.

W przypadku korzystania ze standardowego modelu ATL COM należy użyć dwóch obiektów: obiektu zewnętrznego i obiektu wewnętrznego. Klienci zewnętrzni uzyskują dostęp do funkcji obiektu wewnętrznego za pośrednictwem funkcji otoki zdefiniowanych w obiekcie zewnętrznym. Obiekt zewnętrzny ma typ CComObject.

W przypadku korzystania z zagregowanego obiektu obiekt zewnętrzny nie zapewnia otoki dla funkcjonalności obiektu wewnętrznego. Zamiast tego obiekt zewnętrzny zapewnia wskaźnik, który jest bezpośrednio uzyskiwany przez klientów zewnętrznych. W tym scenariuszu obiekt zewnętrzny ma typ CComAggObject. Obiekt wewnętrzny jest zmienną składową obiektu zewnętrznego i jest typu CYourClass.

Ponieważ klient nie musi przechodzić przez obiekt zewnętrzny w celu interakcji z obiektem wewnętrznym, zagregowane obiekty są zwykle bardziej wydajne. Ponadto obiekt zewnętrzny nie musi znać funkcjonalności zagregowanego obiektu, biorąc pod uwagę, że interfejs zagregowanego obiektu jest bezpośrednio dostępny dla klienta. Jednak nie wszystkie obiekty można agregować. Aby obiekt został zagregowany, należy go zaprojektować z myślą o agregacji.

Usługa ATL implementuje rozwiązanie IUnknown w dwóch fazach:

Inne aspekty obiektu COM ATL są obsługiwane przez inne klasy:

  • Klasa CComCoClass definiuje domyślną fabrykę klas i model agregacji obiektu.

  • Usługa IDispatchImpl zapewnia domyślną implementację IDispatch Interface części dowolnych podwójnych interfejsów w obiekcie.

  • ISupportErrorInfoImpl implementuje ISupportErrorInfo interfejs, który zapewnia, że informacje o błędach mogą być prawidłowo propagowane w łańcuchu wywołań.

W tej sekcji

Implementowanie klasy CComObjectRootEx
Pokaż przykładowe wpisy mapy COM na potrzeby implementowania CComObjectRootExelementu .

Implementowanie klas CComObject, CComAggObject i CComPolyObject
W tym artykule omówiono, jak makra DECLARE_*_AGGREGATABLE wpływają na użycie elementów CComObject, CComAggObjecti CComPolyObject.

Obsługa interfejsów IDispatch i IErrorInfo
Wyświetla listę klas implementacji ATL, które mają być używane do obsługi IDispatch interfejsów i IErrorInfo .

Obsługa interfejsu IDispEventImpl
Omówienie kroków implementowania punktu połączenia dla klasy.

Zmienianie domyślnej fabryki klas i modelu agregacji
Pokaż makra używane do zmiany domyślnej fabryki klas i modelu agregacji.

Tworzenie obiektu zagregowanego
Zawiera listę kroków tworzenia zagregowanego obiektu.

Tworzenie projektu ATL
Zawiera informacje o tworzeniu obiektu COM ATL.

ATL
Zawiera linki do tematów koncepcyjnych dotyczących programowania przy użyciu biblioteki szablonów aktywnych.

Zobacz też

Pojęcia