Поделиться через


CComTearOffObject Class

Этот класс реализует интерфейс перемещаемый.

template< 
   class Base  
> 
class CComTearOffObject : 
   public Base

Параметры

  • Base
    Перемещаемый собственный класс, производный от CComTearOffObjectBase и интерфейсы требуется пользовательский перемещаемый объект к поддержке.

Библиотеки ATL реализует его перемещаемые интерфейсы в шагах 2 — методы CComTearOffObjectBase обрабатывают счетчика ссылок и QueryInterface, пока CComTearOffObject реализует IUnknown.

Члены

Открытые конструкторы

Имя

Описание

CComTearOffObject::CComTearOffObject

Конструктор.

CComTearOffObject::~CComTearOffObject

Деструктор.

Открытые методы

Имя

Описание

CComTearOffObject::AddRef

Увеличивает счетчик ссылок для объекта CComTearOffObject.

CComTearOffObject::QueryInterface

Возвращает указатель на запрашиваемый интерфейс на вашем перемещаемом классе или классе владелец.

CComTearOffObject::Release

Уменьшает счетчик ссылок для объекта CComTearOffObject и удаляет его.

Методы CComTearOffObjectBase

CComTearOffObjectBase

Конструктор.

Элементы данных CComTearOffObjectBase

m_pOwner

Указатель на CComObject, унаследованный от класса владелец.

Заметки

Перемещаемый CComTearOffObject реализует интерфейс как отдельный объект, который создается только в том случае, если запрашивается интерфейс. Перемещаемое удалено при его значение счетчика ссылок равно нулю. Обычно при построении перемещаемый интерфейс для интерфейса, который редко используется, поскольку использование перемещаемое сохраняет указатель vtable во всех экземплярах основного объекта.

Необходимо создать класс, реализующий перемещаемое из CComTearOffObjectBase и каким из этих величин интерфейсам требуется пользовательский перемещаемый объект к поддержке. CComTearOffObjectBase в классе templatized владелец и модели потока. Класс владельцем класс объекта, для которого приведена перемещаемое. Если не указать модель потока, то по умолчанию используется модель потока.

Необходимо создать сопоставление модели COM для перемещаемого класса. Когда создает библиотеки ATL перемещаемое, он создает CComTearOffObject<CYourTearOffClass> или CComCachedTearOffObject<CYourTearOffClass>.

Например, в образце BEEPER, класс CBeeper2 перемещаемый класс и класс CBeeper класс владелец:

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:

};

Иерархия наследования

Base

CComTearOffObject

Требования

Header: atlcom.h

См. также

Ссылки

CComCachedTearOffObject Class

Другие ресурсы

ATL Class Overview