Кроме идентификатора GUID объекту присваивают еще два, более осмысленных текстовых имени для отображения на экране пользователю и для обращения в тексте программы. При регистрации СОМ-объекта на том компьютере, где он будет использоваться, производятся записи в реестр (раздел HKEY_CLASSES_ROOT) о том, какое имя соответствует данному GUID и на каком диске и в какой папке записана библиотека DLL с реализацией СОМ-объекта. В результате появляется возможность по программному имени или GUID объекта найти запись о нем в реестре и загрузить соответствующую библиотеку.

Для обеспечения изоляции СОМ-сервер не экспортирует имена объявленных в нем переменных, а СОМ-объект не содержит полей данных типа publ ic. Он взаимодействует с приложением только при помощи методов, сгруппированных в интерфейсы. Интерфейс - это набор методов, унаследованных объектом от одного абстрактного класса, содержащего только заголовки виртуальных функций.

В листинге 23.1 приведен пример описания стандартного интерфейса IUnknown, содержащего три метода.

Листинг 23.1

class IUnknown { public
virtual ULONG _stdcall AddRef(void) - 0; virtual ULONG _stdcall Release(void) - 0;
virtual HRESULT _stdcall QueryInterface(REFIID riid. void **ppvObject) - 0; }

Тип REFI ID объявлен в guiddef.h как указатель на тип GUID, реализующий глобально-уникальный идентификатор.

Объект может предоставлять приложению несколько интерфейсов. В С++ они наследуются от нескольких предков на основе механизма множественного наследования. Имена классов, которыми СОМ-объекты реализуются в сервере, не помещаются в заголовочные файлы, доступные прикладной программе. Поэтому, если в сервере реализован некоторый класс, например class My Inf о, с методом GetHardMem( ), в прикладной программе нельзя создать экземпляр этого класса, а затем обратиться к его методу, как показано в следующем фрагменте кода:

MyInfo *р - new MyInfo; p-> GetHardMem(&Data); Это позволяет исключить возможность случайного совпадения имен разных объектов и обеспечить их коммерческое тиражирование. Но этот же механизм лишает приложения возможности пользоваться стандартными способами создания объектов и вызова их методов. Эта проблема разрешается существующими в операционной системе Windows средствами поддержки СОМ-технологии и требованиями к реализации СОМ-сервера.


⇐ Предыдущая| |Следующая ⇒