CComTearOffObject Class
Этот класс реализует интерфейс перемещаемый.
template<
class Base
>
class CComTearOffObject :
public Base
Параметры
- Base
Перемещаемый собственный класс, производный от CComTearOffObjectBase и интерфейсы требуется пользовательский перемещаемый объект к поддержке.
Библиотеки ATL реализует его перемещаемые интерфейсы в шагах 2 — методы CComTearOffObjectBase обрабатывают счетчика ссылок и QueryInterface, пока CComTearOffObject реализует IUnknown.
Члены
Открытые конструкторы
Имя |
Описание |
---|---|
Конструктор. |
|
Деструктор. |
Открытые методы
Имя |
Описание |
---|---|
Увеличивает счетчик ссылок для объекта CComTearOffObject. |
|
Возвращает указатель на запрашиваемый интерфейс на вашем перемещаемом классе или классе владелец. |
|
Уменьшает счетчик ссылок для объекта CComTearOffObject и удаляет его. |
Методы CComTearOffObjectBase
Конструктор. |
Элементы данных CComTearOffObjectBase
Указатель на 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