CComObjectRootEx Class
Этот класс предоставляет методы для управления count ссылки на объект и для nonaggregated и агрегированных объектов.
template<
class ThreadModel
>
class CComObjectRootEx : public CComObjectRootBase
Параметры
- ThreadModel
Класс методы, реализующие нужную потоковую модель. Можно явно задать потоковую модель с помощью ThreadModel к CComSingleThreadModel, CComMultiThreadModel или CComMultiThreadModelNoCS. Можно принять модель потока сервера по умолчанию путем установки ThreadModel к CComObjectThreadModel или CComGlobalsThreadModel.
Члены
Методы
Конструктор. |
|
Увеличивает счетчик ссылок для nonaggregated объекта. |
|
Уменьшает счетчик ссылок для nonaggregated объекта. |
|
Если модель потоков многопоточного, то возвращает владельца объекта критической секции. |
|
Если модель потоков многопоточного, освобождает владельца объекта критической секции. |
Методы CComObjectRootBase
Переопределение в классе для выполнения любой инициализации должен быть объектом. |
|
Переопределение в классе для выполнения любой очистки должен быть объектом. |
|
Увеличивает счетчик ссылок для статистически вычислениеого объекта. |
|
Делегаты к внешнему IUnknown объединенного объекта. |
|
Уменьшает счетчик ссылок для статистически вычислениеого объекта. |
Статические функции
Делегаты в IUnknown nonaggregated объекта. |
|
Вызывается во время инициализации и завершения модуля для производных классов, перечисленных в сопоставлении объекта. |
Элементы данных
С m_pOuterUnknown часть соединения. Используемый, когда объект не статистической обработки для хранения счетчика ссылок AddRef и Выпуск. |
|
С 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