CComTearOffObject

templatelt; класс База >
класс CComTearOffObject : государственные База

Параметры

База

Отрывной класс, производный от CComTearOffObjectBase и интерфейсов, вы хотите, чтобы ваш отрывной объект для поддержки.

ATL реализует свои интерфейсы отрывной в два этапа — CComTearOffObjectBase методы обрабатывают счетчик ссылок и QueryInterface, в то время как реализует CComTearOffObject IUnknown.

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

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

Следует создать карту COM для класса отрывной. Когда ATL создает отрывания, она будет создавать CComTearOffObjectlt;CYourTearOffClass > или CComCachedTearOffObject <CYourTearOffClass>.

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

класс CBeeper2: общественного ISupportErrorInfo,
 nbsp;               государственные CComTearOffObjectBase <CBeeper>
{
общественности:
   CBeeper2() {}
   STDMETHOD(InterfaceSupportsErrorInfo) (REFIID riid)
   {
      возвращение (InlineIsEqualGUID(IID_IBeeper,riid))? 
              S_OK: S_FALSE;
   }

BEGIN_COM_MAP(CBeeper2)
      COM_INTERFACE_ENTRY(ISupportErrorInfo)
   END_COM_MAP()
};

класс CBeeper:
   государственные IDispatchImpl < IBeeper и IID_IBeeper и LIBID_BeeperLib >
   государственные CComObjectRoot
   государственные CComCoClass < CBeeper и CLSID_Beeper >
{
общественности:
   CBeeper();
   BEGIN_COM_MAP(CBeeper)
      COM_INTERFACE_ENTRY(IDispatch)
      COM_INTERFACE_ENTRY(IBeeper)
      COM_INTERFACE_ENTRY_TEAR_OFF (IID_ISupportErrorInfo, CBeeper2)
   END_COM_MAP()
...
}

# include lt;atlcom.h>

Члены класса

См. также CComCachedTearOffObject

Index