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 antarmuka air mata.
Sintaks
template<class Base>
class CComTearOffObject : public Base
Parameter
Dasar
Kelas air mata Anda, berasal dari CComTearOffObjectBase dan antarmuka yang Anda inginkan untuk mendukung objek robek Anda.
ATL mengimplementasikan antarmuka air matanya dalam dua fase - CComTearOffObjectBase metode menangani jumlah referensi dan QueryInterface, sambil CComTearOffObject mengimplementasikan IUnknown.
Anggota
Konstruktor Publik
| Nama | Deskripsi |
|---|---|
| CComTearOffObject::CComTearOffObject | Konstruktor. |
| CComTearOffObject::~CComTearOffObject | Destruktor. |
Metode Publik
| Nama | Deskripsi |
|---|---|
| CComTearOffObject::AddRef | Menaikkan jumlah referensi untuk CComTearOffObject objek. |
| CComTearOffObject::QueryInterface | Mengembalikan penunjuk ke antarmuka yang diminta pada kelas tear-off Anda atau kelas pemilik. |
| CComTearOffObject::Release | Mengurangi jumlah referensi untuk CComTearOffObject objek dan menghancurkannya. |
Metode CComTearOffObjectBase
| Fungsi | Deskripsi |
|---|---|
| CComTearOffObjectBase | Konstruktor. |
Anggota Data CComTearOffObjectBase
| Anggota data | Deskripsi |
|---|---|
| m_pOwner | Pointer ke CComObject turunan dari kelas pemilik. |
Keterangan
CComTearOffObject mengimplementasikan antarmuka air mata sebagai objek terpisah yang hanya dibuat ketika antarmuka tersebut dikueri. Pemisah dihapus ketika jumlah referensinya menjadi nol. Biasanya, Anda membangun antarmuka air mata untuk antarmuka yang jarang digunakan, karena menggunakan pemecah air mata menyimpan pointer vtable di semua instans objek utama Anda.
Anda harus mendapatkan kelas yang mengimplementasikan tear-off dari CComTearOffObjectBase dan dari antarmuka mana pun yang Anda inginkan untuk mendukung objek robek Anda. CComTearOffObjectBase di-templat pada kelas pemilik dan model utas. Kelas pemilik adalah kelas objek yang sedang diimplementasikan oleh air mata. Jika Anda tidak menentukan model utas, model utas default akan digunakan.
Anda harus membuat peta COM untuk kelas air mata Anda. Ketika ATL membuat instans air mata, atl akan membuat CComTearOffObject<CYourTearOffClass> atau CComCachedTearOffObject<CYourTearOffClass>.
Misalnya, dalam sampel BEEPER, CBeeper2 kelasnya adalah kelas air mata dan CBeeper kelasnya adalah kelas pemilik:
class CBeeper2 :
public ISupportErrorInfo,
public CComTearOffObjectBase<CBeeper>
{
public:
CBeeper2() {}
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)
{
return (InlineIsEqualGUID(IID_IBeeper, riid)) ? S_OK : S_FALSE;
}
BEGIN_COM_MAP(CBeeper2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
};
class ATL_NO_VTABLE CBeeper :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CBeeper, &CLSID_Beeper>,
public IDispatchImpl<IBeeper, &IID_IBeeper, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CBeeper()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_BEEPER)
DECLARE_NOT_AGGREGATABLE(CBeeper)
BEGIN_COM_MAP(CBeeper)
COM_INTERFACE_ENTRY(IBeeper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY_TEAR_OFF(IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
};
Hierarki Warisan
Base
CComTearOffObject
Persyaratan
Header: atlcom.h
CComTearOffObject::AddRef
Menaikkan jumlah referensi objek satu per CComTearOffObject satu.
STDMETHOD_(ULONG, AddRef)();
Tampilkan Nilai
Nilai yang mungkin berguna untuk diagnostik dan pengujian.
CComTearOffObject::CComTearOffObject
Konstruktor.
CComTearOffObject(void* pv);
Parameter
Pv
[di] Penunjuk yang akan dikonversi ke penunjuk ke CComObject<Owner> objek.
Keterangan
Menaikkan jumlah referensi pemilik satu per satu.
CComTearOffObject::~CComTearOffObject
Destruktor.
~CComTearOffObject();
Keterangan
Membebaskan semua sumber daya yang dialokasikan, memanggil FinalRelease, dan mengurangi jumlah kunci modul.
CComTearOffObject::CComTearOffObjectBase
Konstruktor.
CComTearOffObjectBase();
Keterangan
Menginisialisasi anggota m_pOwner ke NULL.
CComTearOffObject::m_pOwner
Penunjuk ke objek CComObject yang berasal dari Pemilik.
CComObject<Owner>* m_pOwner;
Parameter
Pemilik
[di] Kelas di mana tear-off sedang diimplementasikan.
Keterangan
Pointer diinisialisasi ke NULL selama konstruksi.
CComTearOffObject::QueryInterface
Mengambil penunjuk ke antarmuka yang diminta.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
Parameter
iid
[di] IID antarmuka yang diminta.
ppvObject
[out] Penunjuk ke penunjuk antarmuka yang diidentifikasi oleh iid, atau NULL jika antarmuka tidak ditemukan.
Tampilkan Nilai
Nilai HRESULT standar.
Keterangan
Kueri terlebih dahulu untuk antarmuka di kelas tear-off Anda. Jika antarmuka tidak ada, kueri untuk antarmuka pada objek pemilik. Jika antarmuka yang diminta adalah IUnknown, mengembalikan IUnknown pemilik.
CComTearOffObject::Release
Mengurangi jumlah referensi satu per satu dan, jika jumlah referensi adalah nol, menghapus CComTearOffObject.
STDMETHOD_ULONG Release();
Tampilkan Nilai
Dalam build non-debug, selalu mengembalikan nol. Dalam build debug, mengembalikan nilai yang mungkin berguna untuk diagnostik atau pengujian.