Classe CComTearOffObject
Questa classe implementa un'interfaccia di strappo.
Sintassi
template<class Base>
class CComTearOffObject : public Base
Parametri
Base
La classe di strappo, derivata da CComTearOffObjectBase
e le interfacce da cui si vuole supportare l'oggetto tear-off.
ATL implementa le interfacce di strappo in due fasi, ovvero i CComTearOffObjectBase
metodi gestiscono il conteggio dei riferimenti e QueryInterface
, mentre CComTearOffObject
implementa IUnknown.
Membri
Costruttori pubblici
Nome | Descrizione |
---|---|
CComTearOffObject::CComTearOffObject | Costruttore. |
CComTearOffObject::~CComTearOffObject | Distruttore. |
Metodi pubblici
Nome | Descrizione |
---|---|
CComTearOffObject::AddRef | Incrementa il conteggio dei riferimenti per un CComTearOffObject oggetto . |
CComTearOffObject::QueryInterface | Restituisce un puntatore all'interfaccia richiesta nella classe di disinstallazione o nella classe proprietario. |
CComTearOffObject::Release | Decrementa il conteggio dei riferimenti per un CComTearOffObject oggetto e lo elimina definitivamente. |
Metodi CComTearOffObjectBase
Funzione | Descrizione |
---|---|
CComTearOffObjectBase | Costruttore. |
Membri dati CComTearOffObjectBase
Membro dati | Descrizione |
---|---|
m_pOwner | Puntatore a un CComObject derivato dalla classe owner. |
Osservazioni:
CComTearOffObject
implementa un'interfaccia di strappo come oggetto separato di cui viene creata un'istanza solo quando viene eseguita una query su tale interfaccia. L'eliminazione viene eliminata quando il conteggio dei riferimenti diventa zero. In genere, si crea un'interfaccia di disinstallazione per un'interfaccia che viene usata raramente, poiché l'uso di un'operazione di disinstallazione salva un puntatore di tabella virtuale in tutte le istanze dell'oggetto principale.
È necessario derivare la classe che implementa lo strappo da CComTearOffObjectBase
e da qualsiasi interfaccia che si desidera che l'oggetto di strappo supporti. CComTearOffObjectBase
viene templatizzato nella classe proprietario e nel modello di thread. La classe owner è la classe dell'oggetto per il quale viene implementato un'operazione di disinstallazione. Se non si specifica un modello di thread, viene usato il modello di thread predefinito.
È consigliabile creare una mappa COM per la classe di strappo. Quando ATL crea un'istanza di tear-off, crea CComTearOffObject<CYourTearOffClass>
o CComCachedTearOffObject<CYourTearOffClass>
.
Nell'esempio BEEPER, ad esempio, la CBeeper2
classe è la classe tear-off e la CBeeper
classe è la classe owner:
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:
};
Gerarchia di ereditarietà
Base
CComTearOffObject
Requisiti
Intestazione: atlcom.h
CComTearOffObject::AddRef
Incrementa il numero di riferimenti dell'oggetto CComTearOffObject
di uno.
STDMETHOD_(ULONG, AddRef)();
Valore restituito
Valore che può essere utile per la diagnostica e il test.
CComTearOffObject::CComTearOffObject
Costruttore.
CComTearOffObject(void* pv);
Parametri
Pv
[in] Puntatore che verrà convertito in un puntatore a un CComObject<Owner>
oggetto .
Osservazioni:
Incrementa il numero di riferimenti del proprietario di uno.
CComTearOffObject::~CComTearOffObject
Distruttore.
~CComTearOffObject();
Osservazioni:
Libera tutte le risorse allocate, chiama FinalRelease e decrementa il conteggio dei blocchi del modulo.
CComTearOffObject::CComTearOffObjectBase
Costruttore.
CComTearOffObjectBase();
Osservazioni:
Inizializza il membro m_pOwner su NULL.
CComTearOffObject::m_pOwner
Puntatore a un oggetto CComObject derivato da Owner.
CComObject<Owner>* m_pOwner;
Parametri
Proprietario
[in] Classe per la quale viene implementato un'operazione di disinstallazione.
Osservazioni:
Il puntatore viene inizializzato su NULL durante la costruzione.
CComTearOffObject::QueryInterface
Recupera un puntatore all'interfaccia richiesta.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
Parametri
iid
[in] IID dell'interfaccia richiesta.
ppvObject
[out] Puntatore al puntatore dell'interfaccia identificato da iid o NULL se l'interfaccia non viene trovata.
Valore restituito
Valore HRESULT standard.
Osservazioni:
Prima di tutto, le query per le interfacce nella classe di strappo. Se l'interfaccia non è presente, esegue una query per l'interfaccia sull'oggetto proprietario. Se l'interfaccia richiesta è IUnknown
, restituisce l'oggetto IUnknown
del proprietario.
CComTearOffObject::Release
Decrementa il conteggio dei riferimenti di uno e, se il conteggio dei riferimenti è zero, elimina .CComTearOffObject
STDMETHOD_ULONG Release();
Valore restituito
Nelle compilazioni non di debug restituisce sempre zero. Nelle compilazioni di debug restituisce un valore che può essere utile per la diagnostica o il test.
Vedi anche
Classe CComCachedTearOffObject
Cenni preliminari sulla classe