Bagikan melalui


Kelas CComTearOffObject

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.

Lihat juga

Kelas CComCachedTearOffObject
Gambaran Umum Kelas