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


CComObjectRootEx Class

Этот класс предоставляет методы для управления count ссылки на объект и для nonaggregated и агрегированных объектов.

template< 
   class ThreadModel  
> 
class CComObjectRootEx : public CComObjectRootBase

Параметры

Члены

Методы

CComObjectRootEx

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

InternalAddRef

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

InternalRelease

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

Блокировка

Если модель потоков многопоточного, то возвращает владельца объекта критической секции.

Unlock

Если модель потоков многопоточного, освобождает владельца объекта критической секции.

Методы CComObjectRootBase

FinalConstruct

Переопределение в классе для выполнения любой инициализации должен быть объектом.

FinalRelease

Переопределение в классе для выполнения любой очистки должен быть объектом.

OuterAddRef

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

OuterQueryInterface

Делегаты к внешнему IUnknown объединенного объекта.

OuterRelease

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

Статические функции

InternalQueryInterface

Делегаты в IUnknown nonaggregated объекта.

ObjectMain

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

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

m_dwRef

С m_pOuterUnknown часть соединения. Используемый, когда объект не статистической обработки для хранения счетчика ссылок AddRef и Выпуск.

m_pOuterUnknown

С m_dwRef часть соединения. Используемый, когда объект статистической обработки для хранения указатель на внешний неизвестный тип.

Заметки

Элемент управления обрабатывает CComObjectRootEx count ссылки на объект и для nonaggregated и агрегированных объектов. Он содержит счетчик ссылок на объект если объект не статистической обработки, и сохраняет указатель на внешний неизвестный, если объект статистической обработки. Для агрегированных объектов, методы CComObjectRootEx могут быть использованы для обработки ошибка внутреннего объекта для проектирования и защитить внешний объект из удаления, если внутренние интерфейсы освобождены или внутренний объект удаляется.

Класс, реализующий сервер модели COM должен наследовать от CComObjectRootEx или CComObjectRoot.

Если определение класса определяет макрос DECLARE_POLY_AGGREGATABLE, то библиотеки ATL создает экземпляр CComPolyObject<CYourClass> при IClassFactory::CreateInstance вызываются. Во время создания проверено значение внешнего неизвестным. Если это NULL, то IUnknown реализуется для nonaggregated объекта. Если внешний неизвестно не NULL, то IUnknown реализуется для статистически вычислениеого объекта.

Если класс не определяет макрос DECLARE_POLY_AGGREGATABLE, то библиотеки ATL создает экземпляр CAggComObject<CYourClass>, агрегированных объектов или экземпляр CComObject<CYourClass> для nonaggregated объектов.

Преимущество использования CComPolyObject что позволяет избежать CComAggObject и having и CComObject в модуле, чтобы настроить статистические и nonaggregated вариантов. Один объект CComPolyObject обрабатывает оба варианта. Поэтому только одна копия vtable и одна копия функций существуют в модуле. Если в таблице vtable велико, это может значительно снизить свой размер модуля. Однако если в таблице vtable мало, то с помощью CComPolyObject могут вызвать несколько более большом размере модуля, поскольку оно не оптимизироватьо для статистически вычислениеого или nonaggregated объекта, например CComAggObject и CComObject.

Если объект статистической обработки, то IUnknown реализуется CComAggObject или CComPolyObject. Эти классы делегируют вызовы QueryInterface, AddRef и Release к CComObjectRootExOuterQueryInterface, OuterAddRef и OuterRelease для переадресации к внешнему неизвестному типу. Обычно переопределяется CComObjectRootEx::FinalConstruct в вашем классе, чтобы создать все статистические объекты, и переопределите CComObjectRootEx::FinalRelease, чтобы освободить все статистические объекты.

Если объект не статистической обработки, то IUnknown реализуется CComObject или CComPolyObject. В этом случае вызовы к QueryInterface, AddRef и Release делегируются к CComObjectRootExInternalQueryInterface, InternalAddRef и InternalRelease для выполнения фактических операций.

Требования

Header: atlcom.h

См. также

Ссылки

CComAggObject Class

CComObject Class

CComPolyObject Class

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

ATL Class Overview