Arsitektur Objek yang dapat Koneksi
Objek yang dapat dihubungkan hanyalah satu bagian dari arsitektur keseluruhan objek yang dapat dihubungkan. Teknologi ini mencakup elemen-elemen berikut:
- objek yang dapat Koneksi. Mengimplementasikan antarmuka I Koneksi ionPointContainer; membuat setidaknya satu objek titik koneksi; menentukan antarmuka keluar untuk klien.
- Klien. Mengkueri objek untuk I Koneksi ionPointContainer untuk menentukan apakah objek dapat dihubungkan; membuat objek sink untuk mengimplementasikan antarmuka keluar yang ditentukan oleh objek yang dapat dihubungkan.
- Objek sink. Mengimplementasikan antarmuka keluar; digunakan untuk membuat koneksi ke objek yang dapat dihubungkan.
- objek titik Koneksi ion. Menerapkan antarmuka I Koneksi ionPoint dan mengelola koneksi dengan sink klien.
Hubungan antara klien, objek yang dapat dihubungkan, titik koneksi, dan sink diilustrasikan dalam diagram berikut:
Sebelum objek titik koneksi memanggil metode di antarmuka sink di langkah 3 dalam diagram sebelumnya, itu harus QueryInterface untuk antarmuka tertentu yang diperlukan, bahkan jika pointer sudah diteruskan dalam langkah 2 panggilan ke metode Saran.
Dua objek enumerator juga terlibat dalam arsitektur ini meskipun tidak ditampilkan dalam ilustrasi. Satu dibuat oleh metode di I Koneksi ionPointContainer untuk menghitung titik koneksi dalam objek yang dapat dihubungkan. Yang lain dibuat oleh metode di I Koneksi ionPoint untuk menghitung koneksi yang saat ini dibuat ke titik koneksi tersebut. Satu titik koneksi dapat mendukung beberapa antarmuka sink yang terhubung, dan harus melakukan iterasi melalui daftar koneksi setiap kali melakukan panggilan metode pada antarmuka tersebut. Proses ini dikenal sebagai multicasting.
Saat bekerja dengan objek yang dapat dihubungkan, penting untuk dipahami bahwa objek yang dapat dihubungkan, setiap titik koneksi, setiap sink, dan semua enumerator adalah objek terpisah dengan implementasi IUnknown terpisah, jumlah referensi terpisah, dan masa pakai terpisah. Klien yang menggunakan objek ini selalu bertanggung jawab untuk merilis semua jumlah referensi yang dimilikinya.
Catatan
Objek yang dapat dihubungkan dapat mendukung lebih dari satu klien dan dapat mendukung beberapa sink dalam klien. Demikian juga, sink dapat dihubungkan ke lebih dari satu objek yang dapat dihubungkan.
Langkah-langkah untuk membuat koneksi antara klien dan objek yang dapat dihubungkan adalah sebagai berikut:
- Klien meminta I Koneksi ionPointContainer pada objek untuk menentukan apakah objek dapat dihubungkan. Jika panggilan ini berhasil, klien memegang penunjuk ke antarmuka I Koneksi ionPointContainer pada objek yang dapat dihubungkan dan penghitung referensi objek yang dapat dihubungkan telah bertahap. Jika tidak, objek tidak dapat dihubungkan dan tidak mendukung antarmuka keluar.
- Jika objek dapat dihubungkan, klien selanjutnya mencoba mendapatkan penunjuk ke antarmuka I Koneksi ionPoint pada titik koneksi dalam objek yang dapat dihubungkan. Ada dua metode untuk mendapatkan pointer ini, baik di I Koneksi ionPointContainer::Find Koneksi ionPoint dan di I Koneksi ionPointContainer::Enum Koneksi ionPoints. Ada beberapa langkah tambahan yang diperlukan jika Enum Koneksi ionPoints digunakan. (Lihat Menggunakan I Koneksi ionPointContainer untuk informasi selengkapnya.) Jika berhasil, objek yang dapat dihubungkan dan klien mendukung antarmuka keluar yang sama. Objek yang dapat dihubungkan mendefinisikannya dan memanggilnya, dan klien mengimplementasikannya. Klien kemudian dapat berkomunikasi melalui titik koneksi dalam objek yang dapat dihubungkan.
- Klien kemudian memanggil Advise pada titik koneksi untuk membuat koneksi antara antarmuka sink dan titik koneksi objek. Setelah panggilan ini, titik koneksi objek menyimpan penunjuk ke antarmuka keluar di sink.
- Kode di dalam Advise memanggil QueryInterface pada penunjuk antarmuka yang diteruskan, meminta pengidentifikasi antarmuka tertentu yang disambungkannya.
- Objek memanggil metode pada antarmuka sink sesuai kebutuhan, menggunakan pointer yang dipegang oleh titik koneksinya.
- Klien memanggil Unadvise untuk mengakhiri koneksi. Kemudian klien memanggil I Koneksi ionPoint::Release untuk membebaskan penangguhannya pada titik koneksi dan, oleh karena itu, objek utama yang dapat dihubungkan juga. Klien juga harus memanggil I Koneksi ionPointContainer::Release untuk membebaskan penangguhannya pada objek utama yang dapat dihubungkan.
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk