Sdílet prostřednictvím


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.

Viz také

Referenční dokumentace

Základy objektů COM ATL