Podpora IDispEventImpl
Šablona třídy IDispEventImpl lze poskytnout podporu pro připojení bod propadů ve své třídě ATL.Jímky bod připojení umožňuje zpracovávat události výstřelu z externí objekty modelu COM do třídy.Tyto propadů bod připojení jsou mapovány s mapování jímky událostí, podle své třídy.
Správně implementovat jímky bod připojení pro třídu, musí být provedeny následující kroky:
Import knihovny typů pro každý externí objekt
Deklarovat IDispEventImpl rozhraní
Deklarovat mapování jímky událostí
Poradenství a unadvise spojovací body
Kroky při provádění jímky bod připojení jsou prováděny všechny pouze záhlaví souboru (soubor s příponou h) vaší třídy.
Import knihovny typů
Pro každý externí objekt události, jejichž zpracování je nutné importovat knihovnu typů.Tento krok definuje události, které mohou být zpracovány a poskytuje informace používané při deklarování mapa jímky událostí.#Import směrnice lze toho dosáhnout.Přidat potřebná #import směrnice řádky pro každé rozhraní odeslání bude podporovat záhlaví souboru (soubor s příponou h) vaší třídy.
V následujícím příkladu importuje knihovny typu externího serveru COM (MSCAL.Calendar.7):
#import "PROGID:MSCAL.Calendar.7" no_namespace, raw_interfaces_only
[!POZNÁMKA]
Musí mít zvláštní #import prohlášení pro každý typ externí knihovny bude podporovat.
Deklaraci rozhraní IDispEventImpl
Nyní, importu knihoven typů každého rozhraní odeslání je třeba deklarovat v samostatném IDispEventImpl rozhraní pro každé rozhraní externí odeslání.Upravit přidáním třídy prohlášení IDispEventImpl prohlášení pro každý objekt externí rozhraní.Další informace o parametrech naleznete v tématu IDispEventImpl.
Následující kód deklaruje dvě připojení bod propadů, pro DCalendarEvents rozhraní objektu COM třídou implementována CMyCompositCtrl2 :
public IDispEventImpl<IDC_CALENDAR1, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>,
public IDispEventImpl<IDC_CALENDAR2, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>
Deklarování mapování jímky událostí
Třídy v pořadí na oznámení událostí, které má být zpracováno správná funkce musí trasu každé události jeho správnou obsluhu.Toho lze dosáhnout prohlášením mapování jímky událostí.
ATL poskytuje několik maker BEGIN_SINK_MAP, END_SINK_MAP, a SINK_ENTRY_EX, který usnadňuje toto mapování.Standardní formát je následující:
BEGIN_SINK_MAP(comClass)
SINK_ENTRY_EX(id, iid, dispid, func)
. . . //additional external event entries
END_SINK_MAP()
Následující příklad prohlašuje mapování jímky událostí s dvěma obslužné rutiny událostí:
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()
Provedení je téměř úplná.Poslední krok se týká informací a externí rozhraní unadvising.
Poradenství a Unadvising rozhraní IDispEventImpl
Posledním krokem je implementovat metodu, která bude radit (nebo unadvise) všechny spojovací body v řádné době.Toto poradenství je nutné provést před může probíhat komunikace mezi externím klientům a objekt.Před objekt viditelná, každý externí odesílající rozhraní podporovaný objekt je dotazován na odchozí rozhraní.Vytvoření připojení a odkaz na odchozí rozhraní slouží k zpracování událostí z objektu.Tento postup se označuje jako "radí."
Po ukončení vašeho objektu s vnější rozhraní by měly být oznámeny odchozí rozhraní, že jsou již používány ve své třídě.Tento proces se označuje jako "unadvising".
Jedinečné povahy objekty COM mění tento postup podrobně a spuštění mezi implementacemi.Tyto podrobnosti jsou nad rámec tohoto tématu a nejsou určena.