Udostępnij za pośrednictwem


Klasa CComTearOffObject

Ta klasa implementuje interfejs odrywania.

Składnia

template<class Base>
class CComTearOffObject : public Base

Parametry

Baza
Klasa łzawiąca, pochodząca z CComTearOffObjectBase i interfejsy, które mają obsługiwać obiekt odrywania.

Usługa ATL implementuje interfejsy odrywania w dwóch fazach — CComTearOffObjectBase metody obsługują liczbę odwołań i QueryInterface, a jednocześnie CComTearOffObject implementuje element IUnknown.

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
CComTearOffObject::CComTearOffObject Konstruktor.
CComTearOffObject::~CComTearOffObject Destruktora.

Metody publiczne

Nazwa/nazwisko opis
CComTearOffObject::AddRef Zwiększa liczbę odwołań dla CComTearOffObject obiektu.
CComTearOffObject::QueryInterface Zwraca wskaźnik do żądanego interfejsu w klasie odrywanej lub klasie właściciela.
CComTearOffObject::Release Dekrementuje liczbę odwołań dla CComTearOffObject obiektu i niszczy ją.

Metody CComTearOffObjectBase

Function opis
CComTearOffObjectBase Konstruktor.

Elementy członkowskie danych CComTearOffObjectBase

Element członkowski danych opis
m_pOwner Wskaźnik do CComObject klasy właściciela.

Uwagi

CComTearOffObject Implementuje interfejs odrywania jako oddzielny obiekt, który jest tworzone wystąpienie tylko wtedy, gdy ten interfejs jest odpytywane. Odręcz jest usuwany, gdy jego liczba odwołań staje się równa zero. Zazwyczaj tworzy się interfejs odrywania dla interfejsu, który jest rzadko używany, ponieważ przy użyciu odręczne zapisywanie wskaźnika w formie tabeli wirtualnej we wszystkich wystąpieniach głównego obiektu.

Należy utworzyć klasę wdrażającą odrętę z CComTearOffObjectBase i z niezależnie od interfejsów, które mają obsługiwać obiekt odrywania. CComTearOffObjectBase element jest templatized w klasie właściciela i modelu wątku. Klasa właściciela jest klasą obiektu, dla którego implementowane jest odręcie. Jeśli nie określisz modelu wątku, zostanie użyty domyślny model wątku.

Należy utworzyć mapę MODELU COM dla klasy łzawiącego. Gdy ATL tworzy wystąpienie łzawiącego, zostanie utworzony CComTearOffObject<CYourTearOffClass> lub CComCachedTearOffObject<CYourTearOffClass>.

Na przykład w przykładzie CBeeper2 BEEPER klasa jest klasą odrywaną, a CBeeper klasa jest klasą właściciela:

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:

};

Hierarchia dziedziczenia

Base

CComTearOffObject

Wymagania

Nagłówek: atlcom.h

CComTearOffObject::AddRef

Zwiększa liczbę CComTearOffObject odwołań obiektu o jeden.

STDMETHOD_(ULONG, AddRef)();

Wartość zwracana

Wartość, która może być przydatna do diagnostyki i testowania.

CComTearOffObject::CComTearOffObject

Konstruktor.

CComTearOffObject(void* pv);

Parametry

Pv
[in] Wskaźnik, który zostanie przekonwertowany na wskaźnik do CComObject<Owner> obiektu.

Uwagi

Zwiększa liczbę odwołań właściciela o jeden.

CComTearOffObject::~CComTearOffObject

Destruktora.

~CComTearOffObject();

Uwagi

Zwalnia wszystkie przydzielone zasoby, wywołuje funkcję FinalRelease i usuwa liczbę blokad modułu.

CComTearOffObject::CComTearOffObjectBase

Konstruktor.

CComTearOffObjectBase();

Uwagi

Inicjuje element członkowski m_pOwner wartość NULL.

CComTearOffObject::m_pOwner

Wskaźnik do obiektu CComObject pochodzącego z właściwości Owner.

CComObject<Owner>* m_pOwner;

Parametry

Właściciel
[in] Klasa, dla której wdrażana jest odręcz.

Uwagi

Wskaźnik jest inicjowany do wartości NULL podczas budowy.

CComTearOffObject::QueryInterface

Pobiera wskaźnik do żądanego interfejsu.

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

Parametry

identyfikator iid
[in] Identyfikator IID żądanego interfejsu.

ppvObject
[out] Wskaźnik do wskaźnika interfejsu zidentyfikowany przez identyfikator lub wartość NULL, jeśli interfejs nie zostanie znaleziony.

Wartość zwracana

Standardowa wartość HRESULT.

Uwagi

Najpierw wykonuje zapytania dotyczące interfejsów w klasie odrywania. Jeśli interfejs nie istnieje, wysyła zapytania dotyczące interfejsu w obiekcie właściciela. Jeśli żądany interfejs to IUnknown, zwraca IUnknown właściciela.

CComTearOffObject::Release

Dekrementuje liczbę odwołań o jedną, a jeśli liczba odwołań wynosi zero, usuwa CComTearOffObjectwartość .

STDMETHOD_ULONG Release();

Wartość zwracana

W kompilacjach innych niż debugowanie zawsze zwraca zero. W kompilacjach debugowania zwraca wartość, która może być przydatna do diagnostyki lub testowania.

Zobacz też

Klasa CComCachedTearOffObject
Omówienie klasy