Aracılığıyla paylaş


IDispEventImpl desteği

IDispEventImpl şablon sınıfı, ATL sınıfınızdaki bağlantı noktası havuzları için destek sağlamak için kullanılabilir. Bağlantı noktası havuzu, sınıfınızın dış COM nesnelerinden tetiklenen olayları işlemesine olanak tanır. Bu bağlantı noktası havuzları, sınıfınız tarafından sağlanan bir olay havuzu eşlemesiyle eşlenir.

Sınıfınız için bir bağlantı noktası havuzu düzgün bir şekilde uygulamak için aşağıdaki adımların tamamlanması gerekir:

  • Her dış nesne için tür kitaplıklarını içeri aktarma

  • Arabirimleri bildirme IDispEventImpl

  • Olay havuzu eşlemesi bildirme

  • Bağlantı noktalarını önerin ve önerisini kaldırın

Bağlantı noktası havuzu uygulamayla ilgili adımların tümü yalnızca sınıfınızın üst bilgi dosyasını (.h) değiştirerek gerçekleştirilir.

Tür Kitaplıklarını İçeri Aktarma

Olaylarını işlemek istediğiniz her dış nesne için tür kitaplığını içeri aktarmanız gerekir. Bu adım, işlenebilen olayları tanımlar ve olay havuzu eşlemesi bildirilirken kullanılan bilgileri sağlar. bunu gerçekleştirmek için #import yönergesi kullanılabilir. Destekleyeceğiniz her dağıtım arabirimi için gerekli #import yönerge satırlarını sınıfınızın üst bilgi dosyasına (.h) ekleyin.

Aşağıdaki örnek bir dış COM sunucusunun () tür kitaplığını içeriMSCAL.Calendar.7 aktarır:

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

Not

Desteklediğiniz her dış tür kitaplığı için ayrı #import bir deyiminiz olmalıdır.

IDispEventImpl Arabirimlerini Bildirme

Artık her dağıtım arabiriminin tür kitaplıklarını içeri aktardığınıza göre, her dış dağıtım arabirimi için ayrı IDispEventImpl arabirimler bildirmeniz gerekir. Her dış nesne için bir IDispEventImpl arabirim bildirimi ekleyerek sınıfınızın bildirimini değiştirin. Parametreler hakkında daha fazla bilgi için bkz . IDispEventImpl.

Aşağıdaki kod, sınıfı DCalendarEventstarafından uygulanan COM nesnesi için CMyCompositCtrl2 arabirimi için iki bağlantı noktası havuzu bildirir:

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

Olay Havuzu Eşlemesi Bildirme

Olay bildirimlerinin doğru işlev tarafından işlenmesi için sınıfınızın her olayı doğru işleyicisine yönlendirmesi gerekir. Bu, bir olay havuzu haritası bildirilerek elde edilir.

ATL, bu eşlemeyi kolaylaştıran BEGIN_SINK_MAP, END_SINK_MAP ve SINK_ENTRY_EX çeşitli makrolar sağlar. Standart biçim 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şleyicisi ile bir olay havuzu eşlemesi 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()

Uygulama neredeyse tamamlandı. Son adım, dış arabirimlerin tavsiye ve unadvising ile ilgilidir.

IDispEventImpl Arabirimlerini Ekleme ve Ekleme

Son adım, tüm bağlantı noktalarını uygun zamanlarda önerecek (veya bağlantıyı kaldıracak) bir yöntem uygulamaktır. Dış istemciler ve nesneniz arasındaki iletişim gerçekleşmeden önce bu danışmanlık yapılmalıdır. Nesneniz görünür hale gelmeden önce, nesneniz tarafından desteklenen her dış dağıtım arabirimi giden arabirimler için sorgulanır. Nesneden olayları işlemek için bir bağlantı kurulur ve giden arabirime başvuru kullanılır. Bu yordam "danışmanlık" olarak adlandırılır.

Nesneniz dış arabirimlerle tamamlandıktan sonra giden arabirimlere sınıfınız tarafından artık kullanılmadıkları bildirilmelidir. Bu işleme "unadvising" adı verilir.

COM nesnelerinin benzersiz yapısı nedeniyle bu yordam, uygulamalar arasında ayrıntılı olarak ve yürütmede değişiklik gösterir. Bu ayrıntılar bu konunun kapsamı dışındadır ve ele alınmaz.

Ayrıca bkz.

ATL COM Nesnelerinin Temelleri