Aracılığıyla paylaş


IDispEventImpl destekleme

Şablon sınıfı IDispEventImpl bağlantı noktası havuzlarını atl sınıfında destek sağlamak için kullanılır.Bağlantı noktası havuz sınıfınızın dış com nesnelerinden harekete olayları işlemek izin verir.Bu bağlantı noktası havuzlarını sınıfınızın tarafından sağlanan bir olay havuzu haritası ile eşleştirilir.

Sınıfınız için bir bağlantı noktası havuz düzgün biçimde uygulamak için aşağıdaki adımları tamamlanmış olması gerekir:

  • Her dış nesne için tür kitaplığı alma

  • Bildirmek IDispEventImpl arabirimleri

  • Olay havuzunu haritası bildirmek

  • Öneri ve bağlantı noktaları unadvise

Bağlantı noktası havuz uygulamada söz konusu adımları tüm yalnızca üstbilgi dosyası (.h) sınıfınızın değiştirerek değiştirilerek yapılır.

Tür kitaplığı alma

Olayları ele almak istediğiniz her dış nesnesi için type library içe aktarmanız gerekir.Bu adımı işlenebilir olayları tanımlar ve Olay havuzunu haritası bildirirken kullanılan bilgileri sağlar.Alma yönergesi, bunu gerçekleştirmek için kullanılabilir.Gerekli ekleme #import yönergesi satırlarını üstbilgi dosyasına sınıfınızın (.h) destekleneceğini her dağıtma arabirimi için.

Aşağıdaki örnek dış com sunucusu, tür kitaplığı alır (MSCAL.Calendar.7):

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

[!NOT]

Ayrı bir olmalıdır #import ifade destekleyen her dış tür kitaplığı için.

IDispEventImpl arabirimlerinin bildirme

Aldığınız her dağıtma Arabirimi Tür kitaplıkları artık, ayrı bildirmenize gerek IDispEventImpl arabirimler için her dış dağıtma arabirimi.Sınıfınızın bildirimi ekleyerek değiştirmek bir IDispEventImpl arabirim bildirimi harici her nesne için.Parametreler hakkında daha fazla bilgi için bkz: IDispEventImpl.

Aşağıdaki kod, iki bağlantı noktası havuzlarını için bildirir DCalendarEvents sınıfı tarafından uygulanan com nesnesi için arabirim CMyCompositCtrl2:

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

Olay havuzunu haritası bildirmek

Uygun işlev tarafından işlenecek olay bildirimleri, sınıfınızın doğru işleyicisine her olayı yönlendirmek gerekir.Bu Olay havuzunu haritası bildirerek sağlanır.

atl birkaç makrolar sağlar BEGIN_SINK_MAP, END_SINK_MAP, ve SINK_ENTRY_EX, yapan Bu eşleştirme daha kolay.Standart biçimi aşağıdaki gibidir:

BEGIN_SINK_MAP(comClass)

SINK_ENTRY_EX(id, iid, dispid, func)

. . . //additional external event entries

END_SINK_MAP()

Aşağıdaki örnek, iki olay işleyicileri Olay havuzunu eşlemeyle bildirir:

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()

Neredeyse tümüyle uygulamasıdır.Son adımı advising ve harici arabirim unadvising ilgilidir.

Bildiren ve IDispEventImpl arabirimleri Unadvising

Son adım, uygun zamanlarda önerme (unadvise tüm bağlantı noktaları veya) bir yöntem geliþtirmektir.Dış istemcileri nesnenizin arasındaki iletişimi gerçekleşmeden önce bu bildiren yapılması gerekir.Nesnenizin görünür haline gelmeden önce sizin nesnesinin desteklediği her dış dağıtma arabirimi giden arabirimler için sorgulanır.Bir bağlantı kurulur ve giden arabirime başvuru nesnesi olayları işlemek için kullanılır.Bu yordam "bildiren olarak." denir.

Nesneniz ile dışsal arabirimler bittikten sonra giden arabirimleri bunlar sizin sınıf tarafından artık kullanılmayan bildirilmesi gerekir.Bu işlem "unadvising olarak." denir.

com nesnelerinin benzersiz doğası, bu yordam, ayrıntı ve uygulamaları arasındaki yürütme değişir.Bu ayrıntılar, bu konunun kapsamı dışındadır ve değil adreslenir.

Ayrıca bkz.

Başvuru

atl com nesnelerinin temelleri