Технологии разработки программного обеспечения


Создание СОМ-объектов - часть 2


Для этого клиент использует фабрику класса (class factory) — СОМ-объект, способный генерировать объекты одного конкретного класса.

Фабрика класса поддерживает интерфейс IClassfactory, включающий две операции. Операция Createlnstance создает СОМ-объект — экземпляр конкретного класса, имеет параметр — идентификатор интерфейса, указатель на который надо вернуть клиенту. Операция LockServer позволяет сохранять сервер фабрики загруженным в память.

Клиент вызывает фабрику с помощью функции библиотеки COM CoGetClassObject:

CoGetClassObject (<CLSID создаваемого обьекта>, < IID интерфейса IClassFactory>)

В качестве третьего параметра функции можно задать тип запускаемого сервера.

Библиотека СОМ запускает фабрику класса и возвращает указатель на интерфейс IClassFactory этой фабрики. Дальнейший порядок работы с помощью фабрики иллюстрирует рис. 13.20.

Рис. 13.20. Создание СОМ-объекта с помощью фабрики класса: 1 — клиент вызывает

IClassFactory :: Createlnstance (IID A); 2 — фабрика класса создает СОМ-объект и получает

указатель на его интерфейс; 3 — фабрика класса возвращает указатель на интерфейс А

СОМ-объекта; 4 — теперь клиент может вызывать операции СОМ-объекта

Клиент вызывает операцию IClassFactory::CreateInstance фабрики, в качестве параметра которой задает идентификатор необходимого интерфейса объекта (IID). В ответ фабрика класса создает СОМ-объект и возвращает указатель на заданный интерфейс. Теперь клиент применяет возвращенный указатель для вызова операций СОМ-объекта.

Очень часто возникает следующая ситуация — существующий СОМ-класс заменили другим, поддерживающим как старые, так и дополнительные интерфейсы и имеющим другой CLSID. Появляется задача — обеспечить использование нового СОМ-класса старыми клиентами. Обычным решением является запись в системный реестр соответствия между старым и новым CLSID. Запись выполняется с помощью библиотечной функции CoTreatAsClass:

CoTreatAsClass (<старый CLSID>, <новый CLSID>).

 




Начало  Назад  Вперед



Книжный магазин