ВУЗ:
Составители:
Рубрика:
7
При доступе с помощью VTable клиентской программе необходима библиотека
типов (БТ). Это модуль, содержащий описания всех интерфейсов , объявления
констант, обозначающих GUID интерфейсов и классов и др. БТ пишется либо
на специальном языке описания интерфейсов IDL, либо на используемом языке
программирования. В случае использования Delphi БТ хранится в файле с
расширением *.pas и должна быть подключена директивой Uses.
Однако первоочередной задачей является поиск серверов по запросу клиента .
Поиск осуществляется по базе данных, записанной в реестре Windows в разделе
HKEY_CLASSES_ROOT\CLSID. Для каждого сервера прописывается его ме-
стонахождение - локальный или сетевой путь . Таким образом, клиентское при -
ложение не должно беспокоиться о поиске сервера , достаточно зарегистриро -
вать его на компьютере и COM автоматически найдет и загрузит нужный мо-
дуль. Кроме этого, объект может зарегистрировать свое «дружественное» имя
PROGID. Обычно оно формируется как комбинация имени сервера и имени
объекта , например « Excel.Application» . Ветка реестра с этим именем содержит
ссылку на CLSID объекта , откуда COM получает необходимую информацию.
Внешние и удаленные серверы автоматически регистрируются при первом за-
пуске программы на компьютере . Для регистрации внутренних серверов слу -
жит утилита Regsvr32.exe, поставляемая в составе Windows.
Для вызова активации COM-сервера клиент может использовать функцию
CreateComObject, описанную в модуле ComObj.pas:
function CreateComObject(const ClassID: TGUID): IUnknown;
Параметром здесь является CLSID требуемого объекта , результатом - ссылка на
его интерфейс IUnknown. Далее клиент может запросить требуемый интер-
фейс и работать с ним. CreateComObject – функция Delphi, внутри кото -
рой происходит вызов функции COM API CoCreateInstance.
Функция CreateComObject обращается к системному реестру , по иденти -
фикатору класса находит информацию о местонахождении сервера и запускает
его. Сервер с помощью фабрики классов (Class Factory) создает экземпляр клас-
са – объект и возвращает указатель на запрошенный интерфейс (т.е. указатель
на VTable), увеличивая на единицу счетчик ссылок. Этот указатель передается
клиенту , который по смещению в VTable находит нужный метод .
Все COM-объекты создаются фабриками классов . Каждый COM-класс имеет
соответствующую фабрику , отвечающую за создание объектов этого класса .
Фабрика классов – это COM-объект, реализующий интерфейс
IClassFactory. Ключевым методом этого интерфейса является метод
CreateInstance, который и создает экземпляр требуемого объекта . COM
вызывает метод CreateInstance и передает полученный интерфейс клиен-
ту . Интерфейс фабрики классов создается автоматически для всех COM-
серверов и при их старте регистрируется в системе. После запуска и регистра -
ции COM сразу получает ссылку на фабрику классов .
1.3. Обращение к интерфейсам
7 При д оступеспомощ ью VTable кли ентской программенеобход и ма б и б ли оте ка ти п ов (БТ). Э то мод уль, сод ерж ащ и й опи сани я в сех и нтерфей сов , объяв лени я констант, обоз начаю щ и х GUID и нтерфей сов и классов и д р. БТ пи ш ется ли бо на специ альном яз ы кеопи сани яи нтерфей сов IDL, ли бо на и спольз уемом яз ы ке программи ров ани я. В случае и спольз ов ани я Delphi БТ храни тся в фай ле с расш и рени ем *.pas и д олж на бы ть под клю чена д и ректи в ой Uses. О д нако первоочеред ной з ад ачей яв ляется пои сксерверов по з апросу кли ента. Пои скосущ еств ляетсяпо баз ед анны х, з апи санной в реестреWindows в раз д еле HKEY_CLASSES_ROOT\CLSID. Д ля каж д ого сервера пропи сы в ается его ме- стонахож д ени е - локальны й и ли сетев ой путь. Т аки м образ ом, кли ентское при - лож ени е не д олж но беспокои ться о пои ске сервера, д остаточно з ареги стри ро- в ать его на компью тере и COM ав томати чески най д ет и з агруз и т нуж ны й мо- д уль. К роме этого, объект мож ет з ареги стри ров ать св ое «д руж еств енное» и мя PROGID. О бы чно оно форми руется как комби наци я и мени сервера и и мени объекта, напри мер«Excel.Application» . В етка реестра с эти м и менем сод ерж и т ссы лку на CLSID объекта, откуд а COM получает необход и мую и нформаци ю . В неш ни е и уд аленны е серверы ав томати чески реги стри рую тся при первом з а- пуске программы на компью тере. Д ля реги страци и в нутренни х серверов слу- ж и тути ли та Regsvr32.exe, постав ляемаяв состав еWindows. Д ля в ы з ов а акти в аци и COM-сервера кли ент мож ет и спольз ов ать функци ю CreateComObject, опи санную в мод улеComObj.pas: function CreateComObject(const ClassID: TGUID): IUnknown; Параметром з д есь яв ляетсяCLSID требуемого объекта, рез ультатом - ссы лка на его и нтерфей с IUnknown. Д алее кли ент мож ет з апроси ть требуемы й и нтер- фей с и работать с ни м. CreateComObject – функци я Delphi, в нутри кото- рой прои сход и тв ы з ов функци и COM API CoCreateInstance. Ф ункци я CreateComObject обращ ается кси стемному реестру, по и д енти - фи катору класса наход и ти нформаци ю о местонахож д ени и сервера и з апускает его. Серверспомощ ью ф аб ри ки классов (Class Factory) соз д аетэкземплярклас- са – объект и в оз в ращ ает указ атель на з апрош енны й и нтерфей с (т.е. указ атель на VTable), ув ели чи в ая на ед и ни цу счетчи кссы лок. Э тот указ атель перед ается кли енту, которы й по смещ ени ю в VTable наход и тнуж ны й метод . В се COM-объекты соз д аю тся фабри ками классов . К аж д ы й COM-класс и меет соотв етств ую щ ую фабри ку, отв ечаю щ ую з а соз д ани е объектов этого класса. Ф абри ка классов – это COM-объект, реали з ую щ и й и нтерфей с IClassFactory. К лю чев ы м метод ом этого и нтерфей са яв ляется метод CreateInstance, которы й и соз д ает экземпляр требуемого объекта. COM в ы з ы в ает метод CreateInstance и перед ает полученны й и нтерфей с кли ен- ту. И нтерфей с фабри ки классов соз д ается ав томати чески д ля в сех COM- серв еров и при и х старте реги стри руется в си стеме. После з апуска и реги стра- ци и COM сраз у получаетссы лку на фабри ку классов . 1.3. О бращ е ни е к и нт е рф е йсам
Страницы
- « первая
- ‹ предыдущая
- …
- 5
- 6
- 7
- 8
- 9
- …
- следующая ›
- последняя »