CComObjectRootEx

temp&latelt; класThreadModel >
клас CComObjectRootEx: Громадська CComObjectRootBase

Параметри

ThreadModel

Класу, чиї методи реалізації бажаного потокова модель. Явно ви можете вибрати потокова модель, встановивши ThreadModel CComSingleThreadModel, CComMultiThreadModelабо CComMultiThreadModelNoCS. Ви можете прийняти сервера за промовчанням потік модель встановивши ThreadModel CComObjectThreadModel або CComGlobalsThreadModel.

CComObjectRootEx дескрипторів об'єкта посилання count управління для незгруповані і Персональна об'єктів. Вона проводить кількість посилань об'єкта, якщо об'єкт не воєдино і проводить вказівник на зовнішні невідомі, якщо об'єкт є агрегуються. Агрегованих об'єктів CComObjectRootEx методи використовуються для обробки відмови внутрішнього об'єкта побудувати і для захисту зовнішнього об'єкта від видалення, коли внутрішній інтерфейсів звільнені або внутрішнього об'єкта видаляється.

Клас, який реалізує COM сервера слід успадковувати від CComObjectRootEx або CComObjectRoot.

Якщо ваше визначення клас визначає DECLARE_POLY_AGGREGATABLE макрос, ATL створює екземпляр CComPolyObjectlt;CYourClass > коли називається IClassFactory::CreateInstance . Під час створення перевіряється значення зовнішні невідомі. Якщо це значення NULL, IUnknown здійснюється незгруповані об'єкта. Якщо зовнішні невідомі не NULL, IUnknown здійснюється для складеного об'єкта.

Якщо ваш клас не DECLARE_POLY_AGGREGATABLE макрос, ATL створює екземпляр CComObjectlt;CYourClass > агрегованих об'єктів або зразок CComAggObject <CYourClass> для незгруповані об'єктів.

Перевага використання CComPolyObject полягає в тому, що вам уникнути CComAggObject і CComObject у ваш модуль для обробки агрегованих і незгруповані випадках. Один CComPolyObject об'єкт ручками обох випадках. Таким чином, лише одна копія Віртуальна таблиця і один примірник функцій існують у ваш модуль. Якщо ваш таблиці великий, це може суттєво знизити ваш розмір модуля. Однак, якщо ваш таблиці невеликих, використовуючи CComPolyObject може призвести до дещо більший розмір модуля тому, що він не оптимізований для об'єкта агрегованих або незгруповані, як CComAggObject і CComObject.

DECLARE_POLY_AGGREGATABLE макрос буде автоматично додано до вашого класу визначення за допомогою майстра об'єкт ATL повний контроль або Internet Explorer керування.

Якщо об'єкт є узагальненою статистикою, IUnknown здійснюється на CComAggObject або CComPolyObject. Ці класи делегувати QueryInterface, AddRefі звільнення дзвінки на OuterQueryInterface CComObjectRootEx, OuterAddRefі OuterRelease на пересилання зовнішні невідомі. Зазвичай ви перевизначити CComObjectRootEx::FinalConstruct у ваш клас створити будь-які загальні об'єкти і перевизначити CComObjectRootEx::FinalRelease звільнити будь-які загальні об'єкти.

Якщо об'єкт не воєдино, IUnknown реалізується CComObject або CComPolyObject. У цьому випадку, дзвінки на QueryInterface, AddRefі звільнення реєстратору, CComObjectRootEx InternalQueryInterface, InternalAddRefі InternalRelease для виконання операцій, що фактичні.

# включити lt;atlcom.h>

Члени класу

Дивіться також CComAggObject, CComObject, CComPolyObject

Index