Classe di CComTearOffObject
Questa classe implementa un un'interfaccia tear-off.
template<
class Base
>
class CComTearOffObject :
public Base
Parametri
- Base
Il sradichi la classe, derivata da CComTearOffObjectBase e le interfacce che si desidera che il sradicano l'oggetto di supporto.
ATL implementa i relativi un'interfaccia tear-off in due fasi — i metodi CComTearOffObjectBase gestiscono il conteggio dei riferimenti e QueryInterface, mentre CComTearOffObject implementa IUnknown.
Membri
Costruttori pubblici
Nome |
Descrizione |
---|---|
Costruttore. |
|
Il distruttore. |
Metodi pubblici
Nome |
Descrizione |
---|---|
Incrementa il conteggio dei riferimenti per un oggetto CComTearOffObject. |
|
Restituisce un puntatore a un'interfaccia richiesta su uno il sradicano la classe o la classe proprietario. |
|
Decrementa il conteggio dei riferimenti per un oggetto CComTearOffObject e lo stato eliminato. |
Metodi di CComTearOffObjectBase
Costruttore. |
Membri dati di CComTearOffObjectBase
Un puntatore a CComObject derivato dalla classe proprietario. |
Note
UnCComTearOffObject implementa un'interfaccia tear-off come oggetto separato che viene creata un'istanza solo quando tale interfaccia viene eseguita una query per.Lo sradicamento eliminato quando il conteggio dei riferimenti diventa zero.In genere, gli sviluppatori di un'interfaccia tear-off per un'interfaccia utilizzata raramente, poiché tramite uno sradicamento salva un puntatore vtable in tutte le istanze del principale.
È necessario derivare la classe che implementi lo sradicamento da CComTearOffObjectBase e dalle interfacce che il sradichi l'oggetto di supporto.CComTearOffObjectBase templatized la classe proprietario e il modello di threading.La classe proprietario è la classe dell'oggetto di cui uno sradicamento sta implementando.Se non si specifica un modello di threading, il modello di threading predefinito.
È necessario creare un COM si esegue il mapping del sradicate la classe.Quando ATL creare un'istanza dello sradicamento, viene creata CComTearOffObject<CYourTearOffClass> o CComCachedTearOffObject<CYourTearOffClass>.
Ad esempio, nell'esempio BEEPER, la classe CBeeper2 è la classe di sradicamento e la classe CBeeper è la classe proprietario:
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
Header: atlcom.h
Vedere anche
Riferimenti
Classe di CComCachedTearOffObject