Wspieranie IDispEventImpl

Klasy szablonowej IDispEventImpl może służyć do obsługi dla punktów połączenia w obiekt ATL COM. Punktu połączenia pozwala obiektu COM do obsługi zdarzeń z zewnętrznych obiektów COM. Punkty połączenia są mapowane z mapą obiektu sink zdarzenia, świadczone przez obiekt COM.

Do poprawnej realizacji punktu połączenia lub punkty obiektu COM, należy wypełnić następujące kroki:

W tej procedurze będzie zmodyfikowanie tylko nagłówek pliku (.h) klasy COM.

Importowanie biblioteki typów

Dla każdego zewnętrznego obiektu zdarzenia, którego chcesz obsłużyć należy zaimportować do biblioteki typów. Krok ten definiuje zdarzenia, które mogą zostać obsłużone i zawiera informacje, który jest wykorzystywany podczas deklarowania mapę obiektu sink zdarzenia. Dyrektywy #import można osiągnąć ten cel. Dodaj wiersze dyrektywy niezbędne #import dla każdego interfejsu wysyłki, który będzie wspierał w nagłówku pliku (.h) klasy COM.

W poniższym przykładzie importowane biblioteki typów zewnętrznego serwera COM ( MyServer ):

 #Import "D:\MyServer.dll" raw_interfaces_only, no_namespace, named_guids

Uwaga   Musisz mieć oświadczenie oddzielnych #import dla każdego interfejsu zewnętrznego wysyłki, który będzie wspierać.

Deklarowanie interfejsów IDispEventImpl

Teraz, że dokonały przywozu biblioteki typów każdego interfejsu wysyłki, należy zadeklarować oddzielnych interfejsów IDispEventImpl dla każdego interfejsu zewnętrznego wysyłki. Modyfikowanie deklaracji klasy COM, dodając deklarację interfejsu IDispEventImpl dla każdego obiektu zewnętrznego. Aby uzyskać więcej informacji o parametrach zobacz IDispEventImpl.

Następujące wiersze kodu deklaruje dwóch punktów połączeń, własne IExtEvents1 i IExtEvents2 interfejsów, dla obiektu COM implementowane przez klasyCMyObj:

publiczne IDispEventImpllt; 0, CMyObj & DIID__IExtEvents1,
    & LIBID_EXTEVENTS1Lib, 1, 0 >,
IDispEventImpl publiczne < 1, CMyObj & DIID__IExtEvents2,
    & LIBID_EXTEVENTS2Lib, 1, 0 & gt

Deklarowanie mapą Sink zdarzeń

W celu powiadomienia zdarzenia mają być przetwarzane przez funkcję właściwego obiekt modelu COM musi rozesłać każdego zdarzenia do swojej poprawna obsługa. Jest to osiągane przez zadeklarowanie mapą obiektu sink zdarzenia.

ATL zawiera kilka makra, BEGIN_SINK_MAP, END_SINK_MAPi SINK_ENTRY, które ułatwiają to mapowanie. Standardowy format jest następująco:

BEGI&N_SINK_MAP(comClass)
 nbsp; SINK_ENTRY (identyfikator, dispid func.)
... //additional zewnętrzne zdarzenia wpisów
END_SINK_MAP()

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

BEGIN_SINK_MAP(CMyObj)
   SINK_ENTRY (0, Events1, OnClick1)
   SINK_ENTRY (0, Events2, OnClick2)
END_SINK_MAP()

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

Doradzanie i Unadvising interfejsów IDispEventImpl

Ostatnim krokiem jest do wdrożenia metodę, która będzie doradzać (lub unadvise) wszystkie punkty połączeń na prawidłowe razy. Ten doradzanie musi być wykonane przed komunikacji między klientami zewnętrznych i obiekt może mieć miejsce. 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 formantu. Procedura ta jest określana jako "doradzanie."

Po zakończeniu obiektu z zewnętrznych interfejsów wychodzących interfejsów powinny zostać zgłoszone już są używane przez obiekt COM. Ten proces jest określany jako „unadvising. ”

Ze względu na unikatowe rodzaj obiektów COM procedura ta zmienia się, od szczegółów i wykonanie, między implementacjami. Szczegóły te wykraczają poza zakres tego tematu i nie są przedmiotem.

Index