templatelt; клас База >
клас CComTearOffObject : громадськості База
Параметри
База
Відривній клас, отриманих від CComTearOffObjectBase та інтерфейсів, які ви хочете, щоб ваш відривній об'єкт для підтримки.
ATL реалізує свої відривній інтерфейсів в два етапи — CComTearOffObjectBase методи обробки кількість посилань і QueryInterface, хоча реалізує CComTearOffObject IUnknown.
CComTearOffObject реалізує інтерфейс відривній як окремий об'єкт, який ініціалізується лише тоді, коли цей інтерфейс запитала. На відривній видаляється коли його кількість посилань стає нуль. Як правило, ви будуєте відривній інтерфейсу для інтерфейсу, який використовується рідко, оскільки використання на відривній зберігає таблиці вказівник у всіх випадках головний об'єкт.
Клас, впровадження на відривній з CComTearOffObjectBase і з будь-яким вибраним інтерфейси ви хочете відривній об'єкт для підтримки повинні отримати. CComTearOffObjectBase templatized на власника класу і потік моделі. Власник клас-це клас об'єкта, для яких на відривній здійснюється. Якщо потік модель не вказано, використовується потік моделі за замовчуванням.
Ви повинні створити COM карта для вашого відривній класу. Коли ATL створює екземпляр об'єкту на відривній, це створить CComTearOffObjectlt;CYourTearOffClass > або CComCachedTearOffObject <CYourTearOffClass>.
Наприклад, у зразку BEEPER в CBeeper2 клас-це клас відривній і в CBeeper клас-це клас власника:
клас CBeeper2: Громадська ISupportErrorInfo,
nbsp; Громадська CComTearOffObjectBase <CBeeper>
{
готелю:
{CBeeper2()}
STDMETHOD(InterfaceSupportsErrorInfo) (REFIID riid)
{
повернення (InlineIsEqualGUID(IID_IBeeper,riid))?
S_OK: S_FALSE;
}
BEGIN_COM_MAP(CBeeper2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
};
клас CBeeper:
Громадська IDispatchImpl < IBeeper & IID_IBeeper & LIBID_BeeperLib >,
Громадська CComObjectRoot,
Громадська CComCoClass < CBeeper & CLSID_Beeper >
{
готелю:
CBeeper();
BEGIN_COM_MAP(CBeeper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IBeeper)
COM_INTERFACE_ENTRY_TEAR_OFF (IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()
...
}
# включити lt;atlcom.h>
Дивіться також CComCachedTearOffObject