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


Класс CComAggObject

Этот класс реализует интерфейс IUnknown для агрегированного объекта. По определению агрегированный объект содержится в внешнем объекте. Класс CComAggObject аналогичен классу CComObject, за исключением того, что он предоставляет интерфейс, который напрямую доступен внешним клиентам.

Синтаксис

template<class contained>
class CComAggObject : public IUnknown,
   public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>

Параметры

Содержащиеся
Класс, производный от CComObjectRoot или CComObjectRootEx, а также от любых других интерфейсов, которые требуется поддерживать в объекте.

Участники

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

Имя Описание
CComAggObject::CComAggObject Конструктор.
CComAggObject::~CComAggObject Деструктор

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

Имя Описание
CComAggObject::AddRef Увеличивает количество ссылок в агрегированном объекте.
CComAggObject::CreateInstance Эта статическую функцию позволяет создать новый объект CComAggObject<>contained без дополнительных расходов CoCreateInstance.
CComAggObject::FinalConstruct Выполняет окончательную инициализацию m_contained.
CComAggObject::FinalRelease Выполняет окончательное m_containedуничтожение .
CComAggObject::QueryInterface Извлекает указатель на запрошенный интерфейс.
CComAggObject::Release Уменьшает количество ссылок в агрегированном объекте.

Открытые члены данных

Имя Описание
CComAggObject::m_contained Делегирует вызовы IUnknown внешнего неизвестного.

Замечания

CComAggObjectреализует IUnknown для агрегированного объекта. CComAggObject имеет собственный IUnknown интерфейс, отделенный от интерфейса внешнего объекта IUnknown , и поддерживает собственное число ссылок.

Дополнительные сведения об агрегации см. в статье "Основы COM-объектов ATL".

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

CComObjectRootBase

CComObjectRootEx

IUnknown

CComAggObject

Требования

Заголовок: atlcom.h

CComAggObject::AddRef

Увеличивает количество ссылок в агрегированном объекте.

STDMETHOD_(ULONG, AddRef)();

Возвращаемое значение

Значение, которое может быть полезно для диагностика или тестирования.

CComAggObject::CComAggObject

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

CComAggObject(void* pv);

Параметры

Pv
[in] Внешний неизвестный.

Замечания

Инициализирует элемент CComContainedObjectm_contained и увеличивает счетчик блокировок модуля.

Деструктор уменьшает число блокировок модуля.

CComAggObject::~CComAggObject

Деструктор

~CComAggObject();

Замечания

Освобождает все выделенные ресурсы, вызывает FinalRelease и уменьшает число блокировок модуля.

CComAggObject::CreateInstance

Эта статическую функцию позволяет создать новый объект CComAggObject<>contained без дополнительных расходов CoCreateInstance.

static HRESULT WINAPI CreateInstance(
    LPUNKNOWN pUnkOuter,
    CComAggObject<contained>** pp);

Параметры

Pp
[out] Указатель на содержащийся> указатель на CComAggObject<. Если CreateInstance ошибка не выполнена, для pp задано значение NULL.

Возвращаемое значение

Стандартное значение HRESULT.

Замечания

Возвращенный объект имеет число ссылок нулю, поэтому вызов AddRef немедленно используйте Release для освобождения ссылки на указатель объекта после завершения.

Если вам не нужен прямой доступ к объекту, но по-прежнему требуется создать новый объект без дополнительных CoCreateInstanceзатрат, используйте CComCoClass::CreateInstance .

CComAggObject::FinalConstruct

Вызывается во время последних этапов построения объекта, этот метод выполняет любую окончательную инициализацию элемента m_contained .

HRESULT FinalConstruct();

Возвращаемое значение

Стандартное значение HRESULT.

CComAggObject::FinalRelease

Вызывается во время уничтожения объекта, этот метод освобождает элемент m_contained .

void FinalRelease();

CComAggObject::m_contained

Объект CComContainedObject, производный от класса.

CComContainedObject<contained> m_contained;

Параметры

Содержащиеся
[in] Класс, производный от CComObjectRoot или CComObjectRootEx, а также от любых других интерфейсов, которые требуется поддерживать в объекте.

Замечания

Все IUnknown вызовы m_contained делегируются внешнему неизвестному.

CComAggObject::QueryInterface

Извлекает указатель на запрошенный интерфейс.

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp);

Параметры

Iid
[in] Идентификатор запрашиваемого интерфейса.

ppvObject
[out] Указатель на указатель интерфейса, определяемый iid. Если объект не поддерживает этот интерфейс, ppvObject имеет значение NULL.

Pp
[out] Указатель на указатель интерфейса, определяемый по типу Q. Если объект не поддерживает этот интерфейс, для pp задано значение NULL.

Возвращаемое значение

Стандартное значение HRESULT.

Замечания

Если запрошенный интерфейс имеет значение IUnknown, QueryInterface возвращает указатель на собственный IUnknown агрегированный объект и увеличивает число ссылок. В противном случае этот метод запрашивает интерфейс через CComContainedObject член, m_contained.

CComAggObject::Release

Уменьшает количество ссылок в агрегированном объекте.

STDMETHOD_(ULONG, Release)();

Возвращаемое значение

В отладочных сборках Release возвращает значение, которое может быть полезно для диагностика или тестирования. В сборках, отличных от отладки, Release всегда возвращается значение 0.

См. также

Класс CComObject
Класс CComPolyObject
DECLARE_AGGREGATABLE
DECLARE_ONLY_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Общие сведения о классе