Сущность технологии COM



Двоичная композиция - часть 11


Данная методика стабилизации предотвращает преждевременное разрушение, когда внутренний объект освобождает указатели, которые он, быть может, получил в свой код инициализации. Эта методика настолько общепринята, что большинство СОМ-оболочек программирования включают в себя явный метод перекрытия (overridable), который работает внутри области действия пары инкремент/декремент. В MFC (Microsoft Foundation Classes — библиотека базовых классов Microsoft) этот метод называется CreateAggregates, в ATL — FinalConstruct.

Поскольку показанные выше методики реализации агрегируемого объекта не требуют никаких дополнительных базовых классов, кроме классов C++, то альтернативная форма макроса IMPLEMENT_UNKNOWN может прозрачно реализовать раздвоенную реализацию IUnknown. Определение исходного класса:

class Car : public ICar { Car(void); IMPLEMENT_UNKNOWN(Car) BEGIN_INTERFACE_TABLE(Car) IMPLEMENTS_INTERFACE(ICar) IMPLEMENTS_INTERFACE(IVehicle) END_INTERFACE() // IVehicle methods // методы IVehicle STDMETHODIMP GetMaxSpeed(long *pn); // ICar methods // методы ICar STDMETHODIMP Brake(void); };

просто переводится в следующее:

class Car : public ICar { Car(void); //indicate that aggregation is required // показываем, что требуется агрегирование IMPLEMENT_AGGREGATABLE_UNKNOWN(Car) BEGIN_INTERFACE_TABLE(Car) IMPLEMENTS_INTERFACE(ICar) IMPLEMENTS_INTERFACE(IVehicle) END_INTERFACE() // IVehicle methods // методы IVehicle STDMETHODIMP GetMaxSpeed(long *pn); // ICar methods // методы ICar STDMETHODIMP Brake(void); };

Встроенное расширение макроса IMPLEMENT_AGGREGATABLE_UNKNOWN включено в код, приложенный к этой книге.

1

Автор однажды уверовал, что раскраска (coloring) методов является наилучшим способом для обеспечения двух реализации IUnknown. Со временем способ, приведенный в данной книге, доказал свою большую пригодность и не меньшую эффективность.




Содержание  Назад  Вперед