Мегаобучалка Главная | О нас | Обратная связь


В СОМ приложение обращается к сервисам объекта (независимо от того, где последний расположен), вызывая методы некоторого интерфейса



2016-01-26 593 Обсуждений (0)
В СОМ приложение обращается к сервисам объекта (независимо от того, где последний расположен), вызывая методы некоторого интерфейса 0.00 из 5.00 0 оценок




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

Получив указатель на нужный ему интерфейс выполняющегося объекта, клиент может использовать сервисы объекта, просто вызывая методы этого интерфейса. С точки зрения программиста, вызов метода аналогичен вызову локальной процедуры или функции. Но на самом деле код, выполняющийся по вызову метода, может быть частью или библиотеки, или отдельного процесса, или операционной системы и даже располагаться вообще на другом компьютере. Благодаря СОМ, клиентам нет нужды учитывать данные отличия - доступ ко всему осуществляется единообразно. Для доступа к сервисам, предоставляемым любыми типами программного обеспечения, используется одна общая модель (см. рис. 2.5).

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

Иногда этого можно достигнуть прямым
вызовом метода клиентом. Иногда же для связи и передачи параметров за пределы текущей задачи приходится применять так называемый маршалинг (marshalling) или выстраивание.

Маршалингомназывается процесс упаковки параметров вызова в стандартный формат для пересылки. Необходимость стандартного формата обусловлена тем, что разные процессы, выполняемые на одной машине могут быть реализованы на разных языках программирования, и иметь разный формат представления одной и той же информации, например, вещественных чисел и т. п. Обратная операция распаковки из стандартного формата в форму, приемлемую для принимающего процесса называется демаршалингом.

Серверы COM.

Любой объект COM существует внутри некоторого сервера, содержащего код, который и реализует методы интерфейса класса объекта и контролирует данные объекта, пока тот активен. Каждый сервер, как правило, может поддерживать несколько объектов одного класса или даже несколько различных классов, каждый из которых может иметь (а может и не иметь) свой CLSID.

Как видно из рис 2.5 , существуют три основных типа серверов COM:

1. Сервер "в процессе" (in-process): реализован в динамически подключаемой библиотеке (DLL) и, таким образом, подгружается и исполняется в том же адресном пространстве (процессе) что и сам клиент (библиотека на рис 2.5).

2.Локальный сервер (local server или out-of-process): реализован в своем адресном пространстве (в параллельном процессе) на той же машине что и клиент (приложение 2 на рис 2.5).

3.Удаленный сервер (remote server): реализован как отдельный процесс или динамически подключаемая библиотека на удаленной, по отношению к клиенту, машине (УДАЛЕННОЕ приложение на рис 2.5). Возможность создания таких серверов обеспечивает распределенная COM (DCOM).

С точки зрения клиента все три сервера выглядят одинаково - как серверы "в процессе", ибо доступ к методам объектов клиентом по-прежнему осуществляется через указатели интерфейсов. Клиент может различать типы серверов, но на практике, обычно, этого не требуется.

Загрузка СОМ-сервера зависит от его типа - внутренний ли это сервер (DLL) или внешний (приложение).

Внутренний СОМ-сервер представляет собой DLL, которая может создавать СОМ-объекты для их использования в главном приложении. Этот тип СОМ-сервера называется "внутренний", потому что, как и DLL, он располагается в том же процессе, что и основное приложение. Внутренний сервер должен экспортировать стандартные функции реализованные в модуле ComServ, поэтому при работе с ним необходимо убедиться, в том, что эти функции добавлены в описания exports проекта.

Внешние СОМ-серверы являются исполняемыми файлами, которые могут создавать СОМ-объекты для использования в других приложениях. Эти типы серверов называются внешними, поскольку они не выполняются внутри клиентных процессов, а работают в контексте их собственного процесса.

Каждый из типов серверов имеет свои преимущества. Главным достоинством внутренних серверов являетсявысокая скорость обмена данными с клиентом, которая достигается за счет того, что DLL-библиотеки работают в одном процессе с клиентом. Кроме того, DLL-серверы обычно более просты в отладке и тестировании, чем серверы-приложения.

С другой стороны, внешние серверы более выгодны с точки зрения изоляции ошибок. В случае использования внешних серверов даже аварийное завершение работы клиента не приведет к сбою в работе сервера.

2.4.4 Клиенты COM

СОМ-клиенты. Очень важным при разработке СОМ-приложений является создание приложений, называемых СОМ-клиентами, которые могут запрашивать интерфейсы объектов, чтобы определить те услуги, которые может предоставить СОМ-объект. Типичным СОМ-клиентом является диспетчер автоматизации (Automation Controller). Диспетчер автоматизации - это часть приложения, которая знает какой тип информации необходим ему от разных объектов сервера, и она запрашивает данную информацию по мере надобности.

Существуют два способа обращения к методам и свойствам СОМ-объекта: путем ссылки на его библиотеку типов (раннее связывание) и по имени (позднее связывание). Стандарт COM основан на едином для всех поддерживающих его языков формате таблицы, описывающей ссылки на методы объекта, реализующего интерфейс. Однако вызов методов при помощи этой таблицы доступен только для компилирующих языков программирования. Кроме того, базовый язык обращения к серверам Microsoft Office - Visual Basic for Application (VBA) не поддерживает работу с указателями и, следовательно, не может использовать интерфейсы. Специально для такого рода языков (помимо VBA c указателями не работают также языки JavaScript, SmallTalk и некоторые другие) в технологию СОМ введены диспинтерфейсы, позволяющие обращаться к методам и свойствам по имени, а не по адресу. Для поддержки этих языков была разработана технология автоматизации (automation, ранее она называлась OLE Automation), позволяющая приложениям делать свою функциональность доступной для гораздо большего числа клиентов.



2016-01-26 593 Обсуждений (0)
В СОМ приложение обращается к сервисам объекта (независимо от того, где последний расположен), вызывая методы некоторого интерфейса 0.00 из 5.00 0 оценок









Обсуждение в статье: В СОМ приложение обращается к сервисам объекта (независимо от того, где последний расположен), вызывая методы некоторого интерфейса

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (593)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)