Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Catatan
Pustaka Templat Aktif (ATL) terus didukung. Namun, kami tidak lagi menambahkan fitur atau memperbarui dokumentasi.
Kelas templat IDispEventImpl dapat digunakan untuk memberikan dukungan bagi penyerap titik koneksi pada kelas ATL Anda. Titik koneksi sink memungkinkan kelas Anda untuk menangani peristiwa yang dilemparkan dari objek COM eksternal. Sink titik koneksi ini dipetakan dengan peta sink peristiwa, yang disediakan oleh kelas Anda.
Untuk menerapkan sink titik koneksi dengan benar untuk kelas Anda, langkah-langkah berikut harus diselesaikan:
Mengimpor pustaka tipe untuk setiap objek eksternal
Mendeklarasikan
IDispEventImplantarmukaMendeklarasikan peta penanganan peristiwa
Memberi saran dan membatalkan saran pada titik-titik koneksi
Langkah-langkah yang terlibat dalam menerapkan sink titik koneksi semuanya dicapai dengan memodifikasi hanya file header (.h) kelas Anda.
Mengimpor Pustaka Tipe
Untuk setiap objek eksternal yang peristiwanya ingin Anda tangani, Anda harus mengimpor pustaka tipe. Langkah ini menentukan peristiwa yang dapat ditangani dan menyediakan informasi yang digunakan saat mendeklarasikan peta sink peristiwa. Arahan #import dapat digunakan untuk mencapai hal ini. Tambahkan baris direktif yang diperlukan #import ke file header (.h) kelas Anda untuk setiap antarmuka distribusi yang akan Anda dukung.
Contoh berikut mengimpor pustaka jenis server COM eksternal (MSCAL.Calendar.7):
#import "PROGID:MSCAL.Calendar.7" no_namespace, raw_interfaces_only
Catatan
Anda harus memiliki pernyataan terpisah #import untuk setiap pustaka jenis eksternal yang akan Anda dukung.
Mendeklarasikan Antarmuka IDispEventImpl
Sekarang setelah Anda mengimpor pustaka jenis dari setiap antarmuka pengiriman, Anda perlu mendeklarasikan antarmuka terpisah IDispEventImpl untuk setiap antarmuka pengiriman eksternal. Ubah deklarasi kelas Anda dengan menambahkan IDispEventImpl deklarasi antarmuka untuk setiap objek eksternal. Untuk informasi selengkapnya tentang parameter, lihat IDispEventImpl.
Kode berikut mendeklarasikan dua pons penampung titik koneksi pada antarmuka DCalendarEvents, untuk objek COM yang diimplementasikan oleh kelas CMyCompositCtrl2.
public IDispEventImpl<IDC_CALENDAR1, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>,
public IDispEventImpl<IDC_CALENDAR2, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>
Mendeklarasikan Peta Sink Peristiwa
Agar pemberitahuan peristiwa ditangani oleh fungsi yang tepat, kelas Anda harus merutekan setiap peristiwa ke handler yang benar. Ini dicapai dengan mendeklarasikan sebuah peta penampung kejadian.
ATL menyediakan beberapa makro, BEGIN_SINK_MAP, END_SINK_MAP, dan SINK_ENTRY_EX, yang membuat pemetaan ini lebih mudah. Format standarnya adalah sebagai berikut:
BEGIN_SINK_MAP(comClass)
SINK_ENTRY_EX(id, iid, dispid, func)
. . . //additional external event entries
END_SINK_MAP()
Contoh berikut mendeklarasikan peta sink peristiwa dengan dua penanganan aktivitas:
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()
Implementasinya hampir selesai. Langkah terakhir menyangkut pengaturan dan penghapusan pengaturan antarmuka eksternal.
Pemberian dan Pembatalan Saran pada Antarmuka IDispEventImpl
Langkah terakhir adalah menerapkan metode yang akan menyarankan (atau membatalkan saran) semua titik koneksi pada saat yang tepat. Saran ini harus dilakukan sebelum komunikasi antara klien eksternal dan objek Anda dapat berlangsung. Sebelum objek Anda terlihat, setiap antarmuka pengiriman eksternal yang didukung oleh objek Anda diperiksa untuk mencari antarmuka penerimaan. Koneksi telah dibuat dan referensi ke antarmuka keluar digunakan untuk menangani event dari objek. Prosedur ini disebut sebagai "memberi saran."
Setelah objek Anda selesai dengan antarmuka eksternal, antarmuka yang keluar harus diberi tahu bahwa mereka tidak lagi digunakan oleh kelas Anda. Proses ini disebut sebagai "menghentikan pemberian saran."
Karena sifat unik objek COM, prosedur ini bervariasi, secara rinci dan eksekusi, di antara implementasi. Detail ini berada di luar cakupan topik ini dan tidak ditangani.