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.
Kelas ini mengimplementasikan IUnknown untuk objek agregat atau nonaggregated.
Sintaks
template<class contained>
class CComPolyObject : public IUnknown,
public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>
Parameter
Terkandung
Kelas Anda, berasal dari CComObjectRoot atau CComObjectRootEx, serta dari antarmuka lain yang ingin Anda dukung pada objek.
Anggota
Konstruktor Publik
| Nama | Deskripsi |
|---|---|
| CComPolyObject::CComPolyObject | Konstruktor. |
| CComPolyObject::~CComPolyObject | Destruktor. |
Metode Publik
| Nama | Deskripsi |
|---|---|
| CComPolyObject::AddRef | Menaikkan jumlah referensi objek. |
| CComPolyObject::CreateInstance | (Statis) Memungkinkan Anda membuat objek CComPolyObject ><contained baru tanpa overhead CoCreateInstance. |
| CComPolyObject::FinalConstruct | Melakukan inisialisasi akhir .m_contained |
| CComPolyObject::FinalRelease | Melakukan penghancuran m_containedakhir . |
| CComPolyObject::QueryInterface | Mengambil penunjuk ke antarmuka yang diminta. |
| CComPolyObject::Release | Mengurangi jumlah referensi objek. |
Anggota Data Publik
| Nama | Deskripsi |
|---|---|
| CComPolyObject::m_contained | Mendelegasikan IUnknown panggilan ke luar yang tidak diketahui jika objek dikumpulkan atau ke IUnknown objek jika objek tidak dikumpulkan. |
Keterangan
CComPolyObjectmengimplementasikan IUnknown untuk objek agregat atau nonaggregated.
Saat instans CComPolyObject dibuat, nilai luar yang tidak diketahui diperiksa. Jika null, IUnknown diimplementasikan untuk objek nonaggregated. Jika yang tidak diketahui luar bukan NULL, IUnknown diimplementasikan untuk objek agregat.
Keuntungan menggunakannya CComPolyObject adalah Anda menghindari CComAggObject dan CComObject dalam modul Anda untuk menangani kasus agregat dan nonaggregated. Satu CComPolyObject objek menangani kedua kasus. Ini berarti hanya satu salinan vtable dan satu salinan fungsi yang ada di modul Anda. Jika vtable Anda besar, ini dapat secara substansial mengurangi ukuran modul Anda. Namun, jika vtable Anda kecil, penggunaan CComPolyObject dapat mengakibatkan ukuran modul yang sedikit lebih besar karena tidak dioptimalkan untuk objek agregat atau nonaggregated, apa adanya CComAggObject dan CComObject.
Jika makro DECLARE_POLY_AGGREGATABLE ditentukan dalam definisi kelas objek Anda, CComPolyObject akan digunakan untuk membuat objek Anda. DECLARE_POLY_AGGREGATABLE akan secara otomatis dideklarasikan jika Anda menggunakan Wizard Proyek ATL untuk membuat kontrol penuh atau kontrol Internet Explorer.
Jika diagregasi, CComPolyObject objek memiliki sendiri IUnknown, terpisah dari objek IUnknownluar , dan mempertahankan jumlah referensinya sendiri. CComPolyObjectmenggunakan CComContainedObject untuk mendelegasikan ke luar yang tidak diketahui.
Untuk informasi selengkapnya tentang agregasi, lihat artikel Dasar-Dasar Objek COM ATL.
Hierarki Warisan
CComObjectRootBase
IUnknown
CComPolyObject
Persyaratan
Header: atlcom.h
CComPolyObject::AddRef
Menaikkan jumlah referensi pada objek.
STDMETHOD_(ULONG, AddRef)();
Tampilkan Nilai
Nilai yang mungkin berguna untuk diagnostik atau pengujian.
CComPolyObject::CComPolyObject
Konstruktor.
CComPolyObject(void* pv);
Parameter
Pv
[di] Penunjuk ke luar tidak diketahui jika objek akan diagregasi, atau NULL jika objek jika objek tidak dikumpulkan.
Keterangan
Menginisialisasi CComContainedObject anggota data, m_contained, dan menaikkan jumlah kunci modul.
Destruktor mengurangi jumlah kunci modul.
CComPolyObject::~CComPolyObject
Destruktor.
~CComPolyObject();
Keterangan
Membebaskan semua sumber daya yang dialokasikan, memanggil FinalRelease, dan mengurangi jumlah kunci modul.
CComPolyObject::CreateInstance
Memungkinkan Anda membuat objek CComPolyObject ><containedbaru tanpa overhead CoCreateInstance.
static HRESULT WINAPI CreateInstance(
LPUNKNOWN pUnkOuter,
CComPolyObject<contained>** pp);
Parameter
Pp
[out] Penunjuk ke penunjuk CComPolyObject><contained. Jika CreateInstance tidak berhasil, pp diatur ke NULL.
Tampilkan Nilai
Nilai HRESULT standar.
Keterangan
Objek yang dikembalikan memiliki jumlah referensi nol, jadi segera panggil AddRef , lalu gunakan Release untuk membebaskan referensi pada penunjuk objek setelah Anda selesai.
Jika Anda tidak memerlukan akses langsung ke objek, tetapi masih ingin membuat objek baru tanpa overhead CoCreateInstance, gunakan CComCoClass::CreateInstance sebagai gantinya.
CComPolyObject::FinalConstruct
Dipanggil selama tahap akhir konstruksi objek, metode ini melakukan inisialisasi akhir pada anggota data m_contained .
HRESULT FinalConstruct();
Tampilkan Nilai
Nilai HRESULT standar.
CComPolyObject::FinalRelease
Dipanggil selama penghancuran objek, metode ini membebaskan anggota data m_contained .
void FinalRelease();
CComPolyObject::m_contained
Objek CComContainedObject berasal dari kelas Anda.
CComContainedObject<contained> m_contained;
Parameter
Terkandung
[di] Kelas Anda, berasal dari CComObjectRoot atau CComObjectRootEx, serta dari antarmuka lain yang ingin Anda dukung pada objek.
Keterangan
IUnknown panggilan melalui m_contained didelegasikan ke luar yang tidak diketahui jika objek dikumpulkan, atau ke IUnknown objek ini jika objek tidak dikumpulkan.
CComPolyObject::QueryInterface
Mengambil penunjuk ke antarmuka yang diminta.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT QueryInterface(Q** pp);
Parameter
Q
Antarmuka COM.
iid
[di] Pengidentifikasi antarmuka yang diminta.
ppvObject
[out] Penunjuk ke penunjuk antarmuka yang diidentifikasi oleh iid. Jika objek tidak mendukung antarmuka ini, ppvObject diatur ke NULL.
Pp
[out] Penunjuk ke antarmuka yang diidentifikasi oleh __uuidof(Q).
Tampilkan Nilai
Nilai HRESULT standar.
Keterangan
Untuk objek agregat, jika antarmuka yang diminta adalah IUnknown, QueryInterface mengembalikan penunjuk ke objek agregat sendiri IUnknown dan menaikkan jumlah referensi. Jika tidak, metode ini meminta antarmuka melalui CComContainedObject anggota data, m_contained.
CComPolyObject::Release
Mengurangi jumlah referensi pada objek.
STDMETHOD_(ULONG, Release)();
Tampilkan Nilai
Dalam build debug, Release mengembalikan nilai yang mungkin berguna untuk diagnostik atau pengujian. Dalam build nondebug, Release selalu mengembalikan 0.
Lihat juga
Kelas CComObjectRootEx
DECLARE_POLY_AGGREGATABLE
Gambaran Umum Kelas