Sdílet prostřednictvím


CComTearOffObject – třída

Tato třída implementuje rozhraní pro odtržení.

Syntaxe

template<class Base>
class CComTearOffObject : public Base

Parametry

Základna
Třída odtrhání odvozená od CComTearOffObjectBase rozhraní a rozhraní, která chcete, aby byl objekt pro odtržky podporován.

ATL implementuje svá odtržené rozhraní ve dvou fázích – CComTearOffObjectBase metody zpracovávají počet odkazů a QueryInterfaceCComTearOffObject zatímco implementuje IUnknown.

Členové

Veřejné konstruktory

Název Popis
CComTearOffObject::CComTearOffObject Konstruktor
CComTearOffObject::~CComTearOffObject Destruktor.

Veřejné metody

Název Popis
CComTearOffObject::AddRef Zvýší počet odkazů pro CComTearOffObject objekt.
CComTearOffObject::QueryInterface Vrátí ukazatel na požadované rozhraní třídy odtrhání nebo třídy vlastníka.
CComTearOffObject::Release Sníží počet odkazů pro CComTearOffObject objekt a zničí ho.

CComTearOffObjectBase – metody

Function Popis
CComTearOffObjectBase Konstruktor

CComTearOffObjectBase – datové členy

Datový člen Popis
m_pOwner Ukazatel na odvozený CComObject z třídy vlastníka.

Poznámky

CComTearOffObject implementuje rozhraní pro odtržování jako samostatný objekt, který se vytvoří instance pouze v případě, že je toto rozhraní dotazováno. Odtržení se odstraní, když se jeho počet odkazů změní na nulu. Obvykle vytváříte rozhraní pro odtržování pro rozhraní, které se používá zřídka, protože při použití odtržení se uloží ukazatel vtable ve všech instancích hlavního objektu.

Měli byste odvodit třídu, která implementuje odtržení z CComTearOffObjectBase a z kteréhokoli rozhraní, která chcete, aby byl objekt odtržený. CComTearOffObjectBase je šablonován ve třídě vlastníka a modelu vlákna. Třída vlastníka je třída objektu, pro který se implementuje odtržení. Pokud nezadáte model vlákna, použije se výchozí model vlákna.

Pro třídu odtrhání byste měli vytvořit mapu MODELU COM. Když ATL vytvoří instanci slzy, vytvoří CComTearOffObject<CYourTearOffClass> nebo CComCachedTearOffObject<CYourTearOffClass>.

Například v ukázce CBeeper2 BEEPER je třída odtrženou třídou a CBeeper třída je třída vlastníka:

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:

};

Hierarchie dědičnosti

Base

CComTearOffObject

Požadavky

Hlavička: atlcom.h

CComTearOffObject::AddRef

Zvýší počet odkazů objektu CComTearOffObject o jeden.

STDMETHOD_(ULONG, AddRef)();

Návratová hodnota

Hodnota, která může být užitečná pro diagnostiku a testování.

CComTearOffObject::CComTearOffObject

Konstruktor

CComTearOffObject(void* pv);

Parametry

Pv
[v] Ukazatel, který bude převeden na ukazatel na CComObject<Owner> objekt.

Poznámky

Zvýší počet odkazů vlastníka o jeden.

CComTearOffObject::~CComTearOffObject

Destruktor.

~CComTearOffObject();

Poznámky

Uvolní všechny přidělené prostředky, zavolá FinalRelease a sníží počet zámků modulu.

CComTearOffObject::CComTearOffObjectBase

Konstruktor

CComTearOffObjectBase();

Poznámky

Inicializuje m_pOwner člen na HODNOTU NULL.

CComTearOffObject::m_pOwner

Ukazatel na objekt CComObject odvozený od Vlastník.

CComObject<Owner>* m_pOwner;

Parametry

Vlastník
[v] Třída, pro kterou se implementuje odtržení.

Poznámky

Ukazatel je inicializován na hodnotu NULL během sestavování.

CComTearOffObject::QueryInterface

Načte ukazatel na požadované rozhraní.

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);

Parametry

iid
[v] IID požadovaného rozhraní.

ppvObject
[ven] Ukazatel na ukazatel rozhraní identifikovaný parametrem iid nebo NULL, pokud rozhraní nebylo nalezeno.

Návratová hodnota

Standardní hodnota HRESULT.

Poznámky

Nejprve se dotazuje na rozhraní v třídě odtrhání. Pokud rozhraní neexistuje, dotazuje se na rozhraní objektu vlastníka. Pokud je IUnknownpožadované rozhraní , vrátí IUnknown vlastníka.

CComTearOffObject::Release

Sníží počet odkazů o jeden a pokud je počet odkazů nulový, odstraní CComTearOffObjecthodnotu .

STDMETHOD_ULONG Release();

Návratová hodnota

V sestaveních, které nejsou laděné, vrátí vždy nulu. V buildech ladění vrátí hodnotu, která může být užitečná pro diagnostiku nebo testování.

Viz také

CComCachedTearOffObject – třída
Přehled třídy