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.
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 CYourClass
klasy . 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:
Obiekt CComObject, CComAggObject lub CComPolyObject implementuje
IUnknown
metody.Obiekt CComObjectRoot lub CComObjectRootEx zarządza liczbą odwołań i wskaźnikami zewnętrznymi
IUnknown
elementu .
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 CComObjectRootEx
elementu .
Implementowanie klas CComObject, CComAggObject i CComPolyObject
W tym artykule omówiono, jak makra DECLARE_*_AGGREGATABLE wpływają na użycie elementów CComObject
, CComAggObject
i 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.
Sekcje pokrewne
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.