Класс 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
IUnknown
CComAggObject
Требования
Заголовок: atlcom.h
CComAggObject::AddRef
Увеличивает количество ссылок в агрегированном объекте.
STDMETHOD_(ULONG, AddRef)();
Возвращаемое значение
Значение, которое может быть полезно для диагностика или тестирования.
CComAggObject::CComAggObject
Конструктор.
CComAggObject(void* pv);
Параметры
pv
[in] Внешний неизвестный.
Замечания
Инициализирует элемент CComContainedObject
m_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
Общие сведения о классе