Базовые сведения о компонентах COM.

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();
}
						


Hosted by uCoz