Udostępnij za pośrednictwem


Obsługa IDispEventImpl

Klasa szablonu IDispEventImpl można zapewnić obsługę pochłaniacze punktu połączenia w klasie ATL.Zlew punktu połączenia pozwala obsłużyć zdarzenia wywoływane z zewnętrznych obiektów COM klasy.Te obiekty sink punktu połączenia są mapowane z mapą sink zdarzeń dostarczonych przez klasę.

Aby prawidłowo zaimplementować sink punktu połączenia w klasie, musi być wykonywane następujące czynności:

  • Importowanie biblioteki typów dla każdego obiektu zewnętrznego

  • Zadeklarować IDispEventImpl interfejsy

  • Zadeklarować mapę sink zdarzeń

  • Doradza i punkty połączenia unadvise

Wszystkie etapy wdrażania sink punktu połączenia są realizowane przez zmodyfikowanie tylko nagłówek pliku (.h) klasy.

Importowanie biblioteki typów

Dla każdego obiektu zewnętrznego do obsługi zdarzeń należy zaimportować biblioteki typów.W tym kroku definiuje zdarzenia, które są obsługiwane i zawiera informacje używane podczas deklarowania mapy obiektu sink zdarzenia.#Import dyrektywy można to osiągnąć.Dodać niezbędne #import dyrektywa wiersze dla każdego interfejsu wysyłki będzie wspierać pliku nagłówka (.h) klasy.

Poniższy przykład importuje biblioteki typów zewnętrznego serwera COM (MSCAL.Calendar.7):

#import "PROGID:MSCAL.Calendar.7" no_namespace, raw_interfaces_only

[!UWAGA]

Musi mieć oddzielne #import instrukcji dla każdej biblioteki typu zewnętrznego będzie wspierać.

Deklarowanie interfejsów IDispEventImpl

Zaimportowano bibliotek typów interfejsu każdej wysyłki, należy zadeklarować oddzielnych IDispEventImpl interfejsów dla każdego interfejsu zewnętrznego wysyłki.Zmodyfikować dodając deklarację klasy IDispEventImpl deklaracji dla każdego obiektu zewnętrznego interfejsu.Aby uzyskać więcej informacji o parametrach, zobacz IDispEventImpl.

Poniższy kod deklaruje dwóch pochłaniacze punktu połączenia, dla DCalendarEvents interfejsu dla obiektu COM implementowane przez klasy CMyCompositCtrl2:

public IDispEventImpl<IDC_CALENDAR1, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>,
public IDispEventImpl<IDC_CALENDAR2, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>

Deklarowanie mapę Sink zdarzeń

W celu powiadomienia o zdarzeniach, które mają być obsługiwane przez funkcję właściwego klasy musi rozesłać każdego zdarzenia do jego obsługi poprawne.Jest to osiągane przez zadeklarowanie mapę obiektu sink zdarzenia.

ATL zawiera kilka makra BEGIN_SINK_MAP, END_SINK_MAP, i SINK_ENTRY_EX, ułatwiają to mapowanie.Standardowy format jest następujący:

BEGIN_SINK_MAP(comClass)

SINK_ENTRY_EX(id, iid, dispid, func)

. . . //additional external event entries

END_SINK_MAP()

Poniższy przykład deklaruje mapę sink zdarzeń z dwóch zdarzeń:

BEGIN_SINK_MAP(CMyCompositCtrl2)
   //Make sure the Event Handlers have __stdcall calling convention
   SINK_ENTRY_EX(IDC_CALENDAR1, __uuidof(DCalendarEvents), DISPID_CLICK, 
      &CMyCompositCtrl2::ClickCalendar1)
   SINK_ENTRY_EX(IDC_CALENDAR2, __uuidof(DCalendarEvents), DISPID_CLICK, 
      &CMyCompositCtrl2::ClickCalendar2)
END_SINK_MAP()

Implementacja jest prawie pełny.Ostatni etap dotyczy informacją i unadvising zewnętrznych interfejsów.

Doradzanie i interfejsów IDispEventImpl Unadvising

Ostatnim krokiem jest wdrożenie metoda, która będzie doradzać (lub unadvise) wszystkie punkty połączenia w czasie właściwego.Doradzanie ten należy wykonać przed miejsce komunikacji między klientami zewnętrznych i obiekt.Zanim obiekt staje się widoczna, każdy interfejs zewnętrzny wysyłki obsługiwane przez obiekt jest badany pod kątem wychodzących interfejsów.Połączenie jest ustanawiane i odniesienie do interfejsu wychodzącego jest używany do obsługi zdarzeń z obiektu.Ta procedura jest określone jako "doradzanie."

Po zakończeniu pracy z zewnętrznych interfejsów obiektu interfejsów wychodzących powinny zostać zgłoszone już są używane przez klasę.Proces ten nazywa się "unadvising".

Ze względu na charakter unikatowe obiekty COM procedura ta zależy w szczegóły i wykonanie między implementacjami.Szczegóły te wykraczają poza zakres tego tematu i nie są adresowane.

Zobacz też

Informacje

Podstawy obiektów COM ATL