Třída CComTearOffObject
Tato třída implementuje rozhraní odtrhnout.
template<
class Base
>
class CComTearOffObject :
public Base
Parametry
- Base
Vaše odtrhnout třídy odvozené z CComTearOffObjectBase a rozhraní chcete objekt odtrhnout podporu.
ATL implementuje ve dvou fázích jeho odtrhnout rozhraní – CComTearOffObjectBase metod zpracování počet odkazů a QueryInterface , zatímco CComTearOffObject implementuje IUnknown.
Členy
Veřejné konstruktory
Název |
Description |
---|---|
Konstruktor. |
|
Destruktoru. |
Veřejné metody
Název |
Description |
---|---|
Zvýší počet odkazů pro CComTearOffObject objektu. |
|
Odtrhnout třídy nebo vlastník třída vrací ukazatel na požadované rozhraní. |
|
Sníží počet odkaz pro CComTearOffObject objektu a ničí ji. |
Metody CComTearOffObjectBase
Konstruktor. |
CComTearOffObjectBase datové členy
Ukazatel CComObject odvozené od třídy vlastníka. |
Poznámky
CComTearOffObjectjako samostatný objekt, který je vytvořena pouze v případě, že rozhraní je dotazován na implementuje rozhraní odtrhnout.Útržek je odstraněna při jeho počet odkazů bude roven nule.Obvykle vytvoříte rozhraní odtrhnout pro rozhraní, které je používán pouze zřídka, protože použití útržek uloží ukazatel virtuální tabulka ve všech instancích hlavní objekt.
Měla odvození třídy implementace odtrhnout od CComTearOffObjectBase a z toho rozhraní má objekt odtrhnout podporu.CComTearOffObjectBaseVlastník Třída a model podprocesu je templatized.Vlastník Třída je třída objektu, pro který odtrhnout je prováděna.Pokud model podprocesu nezadáte, bude použita výchozí model podprocesu.
Vytvořte mapu COM odtrhnout třídy.Když ATL konkretizuje odtrhnout, vytvoří CComTearOffObject <CYourTearOffClass> nebo CComCachedTearOffObject <CYourTearOffClass>.
Například ve vzorku BEEPER CBeeper2 třída je třída odtrhnout 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:
};
Hierarchii dědičnosti
Base
CComTearOffObject
Požadavky
Záhlaví: atlcom.h