Dasar-Dasar Objek ATL COM
Ilustrasi berikut menggambarkan hubungan di antara kelas dan antarmuka yang digunakan untuk menentukan objek ATL COM.
Catatan
Diagram ini menunjukkan bahwa CComObject
berasal dari CYourClass
sedangkan dan CComPolyObject
disertakan CComAggObject
CYourClass
sebagai variabel anggota.
Ada tiga cara untuk menentukan objek ATL COM. Opsi standar adalah menggunakan CComObject
kelas yang berasal dari CYourClass
. Opsi kedua adalah membuat objek agregat dengan menggunakan CComAggObject
kelas . Opsi ketiga adalah menggunakan CComPolyObject
kelas . CComPolyObject
bertindak sebagai hibrid: dapat berfungsi sebagai CComObject
kelas atau sebagai CComAggObject
kelas, tergantung pada bagaimana pertama kali dibuat. Untuk informasi selengkapnya tentang cara menggunakan CComPolyObject
kelas, lihat Kelas CComPolyObject.
Saat Anda menggunakan ATL COM standar, Anda menggunakan dua objek: objek luar dan objek dalam. Klien eksternal mengakses fungsionalitas objek dalam melalui fungsi pembungkus yang ditentukan dalam objek luar. Objek luar berjenis CComObject
.
Saat Anda menggunakan objek agregat, objek luar tidak menyediakan pembungkus untuk fungsionalitas objek dalam. Sebagai gantinya, objek luar menyediakan penunjuk yang langsung diakses oleh klien eksternal. Dalam skenario ini, objek luar berjenis CComAggObject
. Objek dalam adalah variabel anggota dari objek luar, dan berjenis CYourClass
.
Karena klien tidak perlu melalui objek luar untuk berinteraksi dengan objek dalam, objek agregat biasanya lebih efisien. Selain itu, objek luar tidak perlu mengetahui fungsionalitas objek agregat, mengingat bahwa antarmuka objek agregat tersedia langsung untuk klien. Namun, tidak semua objek dapat diagregasi. Agar objek diagregasi, objek perlu dirancang dengan pertimbangkan agregasi.
ATL mengimplementasikan IUnknown dalam dua fase:
CComObject, CComAggObject, atau CComPolyObject mengimplementasikan
IUnknown
metode .CComObjectRoot atau CComObjectRootEx mengelola jumlah referensi dan pointer
IUnknown
luar .
Aspek lain dari objek ATL COM Anda ditangani oleh kelas lain:
CComCoClass mendefinisikan pabrik kelas default objek dan model agregasi.
IDispatchImpl menyediakan implementasi default dari
IDispatch Interface
bagian antarmuka ganda apa pun pada objek.ISupportErrorInfoImpl mengimplementasikan
ISupportErrorInfo
antarmuka yang memastikan informasi kesalahan dapat disebarluaskan ke rantai panggilan dengan benar.
Di Bagian Ini
Menerapkan CComObjectRootEx
Tampilkan contoh entri peta COM untuk menerapkan CComObjectRootEx
.
Menerapkan CComObject, CComAggObject, dan CComPolyObject
Membahas bagaimana makro DECLARE_*_AGGREGATABLE memengaruhi penggunaan CComObject
, , CComAggObject
dan CComPolyObject
.
Mendukung IDispatch dan IErrorInfo
Mencantumkan kelas implementasi ATL yang akan digunakan untuk mendukung IDispatch
antarmuka dan IErrorInfo
.
Mendukung IDispEventImpl
Membahas langkah-langkah untuk menerapkan titik koneksi untuk kelas Anda.
Mengubah Model Pabrik dan Agregasi Kelas Default
Perlihatkan makro apa yang akan digunakan untuk mengubah pabrik kelas default dan model agregasi.
Membuat Objek Agregat
Mencantumkan langkah-langkah untuk membuat objek agregat.
Bagian Terkait
Membuat Proyek ATL
Menyediakan informasi tentang membuat objek ATL COM.
ATL
Menyediakan tautan ke topik konseptual tentang cara memprogram menggunakan Pustaka Templat Aktif.