Şablon sınıfı IDispEventImpl , bağlantı noktaları, atl com nesnesinde destek sağlamak için kullanılabilir. Bir bağlantı noktası dış com nesnelerinden ateş olayları işlemek, com nesnesi sağlar. Bu bağlantı noktaları, com nesnesi tarafından sağlanan bir olay havuzu Haritası ile eşleştirilir.
Düzgün bir bağlantı noktasını veya noktalarını com nesnesi için uygulamak için aşağıdaki adımları tamamlanmalıdır:
Bu yordam, yalnızca üstbilgi dosyası (.h), com sınıfının değişiklik.
Olayları işlemek 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 harita bildirirken kullanılan bilgileri sağlar. Alma yönergesi, bunu gerçekleştirmek için kullanılabilir. com sınıf üstbilgi dosyasına (.h) destek olacak her dağıtma arabirimi için gerekli alma yönerge satırları ekleme.
Aşağıdaki örnek alır dış com sunucusu, tür kitaplığı ( MyServer ):
alma "D:\MyServer.dll" raw_interfaces_only, no_namespace, named_guids
&Notnbsp; Size destek olacaktır her dış dağıtma arabirimi için ayrı alma deyimi olmalıdır.
Şimdi, her dağıtma arabirimi tür kitaplıkları aktardığınız her dış dağıtma arabirimi için ayrı IDispEventImpl arabirimleri bildirmek gerekiyor. com sınıf bildirimi harici her nesne için bir IDispEventImpl arabirimi bildirimi ekleyerek değiştirin. Parametreler hakkında daha fazla bilgi için bkz: IDispEventImpl.
Aşağıdaki kod satırlarını bildirmek için özel iki bağlantı noktaları IExtEvents1 ve IExtEvents2 arabirimleri, com nesnesinin bir sınıf tarafından uygulananCMyObj:
genel IDispEventImpllt; 0, CMyObj & DIID__IExtEvents1,
& LIBID_EXTEVENTS1Lib, 1, 0 >,
Genel IDispEventImpl < 1, CMyObj & DIID__IExtEvents2,
& LIBID_EXTEVENTS2Lib, 1, 0 & gt
Amacıyla uygun işlev tarafından işlenecek olay bildirimleri, com nesnesi her olay onun doğru işleyicisine yönlendirmek gerekir. Bu olay havuzunu göster bildirerek sağlanır.
Bazı makrolar, BEGIN_SINK_MAP, END_SINK_MAPve SINK_ENTRYbu eşleştirmeyi kolaylaştıran, atl sağlar. Standart biçimi aşağıdaki gibidir:
BEGI&N_SINK_MAP(comClass)
nbsp; SINK_ENTRY (ID, DISPID, func)
... //additional harici olay girdileri
END_SINK_MAP()
Aşağıdaki örnekte iki olay işleyicileri bir olay havuzu harita ilan etti.:
BEGIN_SINK_MAP(CMyObj)
SINK_ENTRY (0, Events1, OnClick1)
SINK_ENTRY (0, Events2, OnClick2)
END_SINK_MAP()
Uygulama neredeyse tamamlandı. Son adım kaygılar danışmanlık ve dış arabirim unadvising.
Son adım, uygun zamanlarda tavsiye (unadvise tüm bağlantı noktaları veya) bir yöntem uygulamaktır. Önce dış istemcileri ve nesne arasındaki iletişimi yer alabilir, bu danışmanlık yapılmalıdır. Nesne görünür olmadan önce nesne tarafından desteklenen her dış dağıtma arabirimi giden arabirimler için sorgulanır. Bağlantı kurulur ve giden arabirimi başvurusu denetim olayları işlemek için kullanılır. Bu yordam is referred to "danışmanlık olarak."
Nesne ile dışsal arabirimler bittikten sonra giden arabirimleri artık senin com nesnesi tarafından kullanıldıkları haberdar olmalıdır. Bu işleme "unadvising gibi." denir
Com nesnelerinin benzersiz doğası nedeniyle, bu yordam, ayrıntı ve yürütme, uygulamalar arasında değişir. Bu ayrıntıları bu konunun kapsamı dışındadır ve ele.