COM (Component Object Model) - спецификация, определяющая стандарт, которому
должны следовать компоненты и клиенты. COM не зависит от языка программирования.
Компоненты COM могут быть написаны на любом языке (C++, Delphi, Visual Basic, Java
и др.).
Модель COM является объектно-ориентированной. COM поддерживает инкапсуляцию
( все детали реализации компонента скрыты от клиента ), наследование ( наследование
интерфейса, но не реализации) и полиморфизм.
Клиент работает с компонентом COM посредством интерфейсов, которые тот ему
предоставляет. Интерфейс COM - это набор некоторых функций. После того, как
интерфейс опубликован, его нельзя изменять, следует создавать новый интерфейс.
Для идентификации COM объектов и интерфейсов в системе служит так называемый GUID
( Globally Unique IDentifier) - глобальный уникальный идентификатор. Для того,
чтобы получить COM интерфейс нужно указать его GUID. Когда GUID относится к COM
интерфейсу, он называется идентификатором интерфейса (IID). Когда GUID
идентифицирует COM объект, он называется идентификатором класса (CLSID).
Чтобы клиент мог получитть доступ к COM объекту, тот должен быть
зарегистрирован в реестре Windows. В частности, в реестре прописываются CLSID и
IID.
Каждый COM интерфейс должен быть произведен от COM интерфейса
IUnknown. Этот интерфейс определяет 3 метода :
QueryInterface(), AddRef(),Release()
.
Функция QueryInterface() предназначена для получения
клиентом некоторого интерфейса от компонента COM.
Функции AddRef() и Release() служат
для управления временем жизни объекта COM.
На C++ интерфейсы COM реализуются как чисто абстрактные базовые классы. Пример :
interface IMyInterface : IUnknown
{
virtual void __stdcall F1();
virtual void __stdcall F2();
}
class CMyComObject : public IMyInterface
{
virtual HRESULT __stdcall QueryInterface(const IID& iid,void** ppv);
virtual ULONG __stdcall AddRef();
virtual ULONG __stdcall Release();
virtual void __stdcall F1();
virtual void __stdcall F2();
}
|