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 QueryInterface
CComTearOffObject
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 IUnknown
požadované rozhraní , vrátí IUnknown
vlastníka.
CComTearOffObject::Release
Sníží počet odkazů o jeden a pokud je počet odkazů nulový, odstraní CComTearOffObject
hodnotu .
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í.