Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП лекции Раздел 4.doc
Скачиваний:
16
Добавлен:
28.09.2019
Размер:
2.56 Mб
Скачать

4.12.3. Типы com-объектов.

Вы можете упаковать объекты СОМ тремя способами: в виде клиентов, в виде серверов и в виде элементов ActiveX. Рассмотрим коротко каждый способ.

Клиенты COM

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

Инструментальные средства VB представляют собой клиента СОМ. Можно использовать VB и подобные инструменты программирования для создания упакованных сценариев, имеющих доступ к объектам автоматизации. Можно создать клиентов, выполнив следующие действия:

• написав программный код в приложении, которое с помощью средств авто­матизации обращается к объектам, предоставляемым другим приложением;

• изменив существующий инструмент программирования, например встроен­ный макроязык, для добавления поддержки автоматизации;

• разработав новое приложение, например компилятор или броузер информа­ции о типе (type information), который поддерживает автоматизацию.

Серверы СОМ

Объекты СОМ могут существовать в том же процессе, что и их контроллер (controller). Также их можно переместить в другой процесс.

• Объекты внутрипроцессного сервера (in-of-process server) реализуются в виде модулей DLL и исполняются внутри пространства процесса контроллера.

• Объекты внепроцесспого сервера (out-of-process server) реализуются в виде исполняемых файлов и исполняются в отдельном пространстве процесса.

Доступ к объектам внутрипроцессного сервера гораздо быстрее, чем к объектам внепроцессного сервера, поскольку средствам автоматизации не требуется вы­полнять удаленный вызов процедур за границами процесса. Это справедливо, если вы ограничитесь средствами VB.

Объекты внутрипроцессного сервера фактически могут исполняться как автоном­ные объекты, если они исполняются под управлением псевдопроцесса (surrogate process), (как стандартного псевдопроцесса, так и пользовательского). Клиенты без всяких затруднений могут создавать внепроцессные объекты, базирующиеся на модулях DLL. Далее мы это рассмотрим.

Механизм доступа (интерфейс IDispatch или таблица VTBL) и локализация объекта (внутрипроцессный или внепроцессный сервер) определяют неизменную долю накладных расходов, требуемых для-доступа к объектам СОМ. Наиболее важные факторы, влияющие на производительность, — специфика и объем работы, выполняемой вызываемыми методами и процедурами. Если метод требует значи­тельных расходов времени или вызова удаленных процедур, то накладные расходы на вызов IDispatch делают вызов функций таблицы VTBL наиболее эффек­тивным решением.

Элементы ActiveX

Элементы ActiveX реализуются в виде внутрипроцессного сервера, который можно использовать в любом контейнере OLE, например VB. Различие между элементом ActiveX и внутрипроцессным сервером СОМ в том, что элементы ActiveX, как правило, имеют пользовательский интерфейс. Полный набор функ­циональных возможностей элемента ActiveX доступен только при использовании внутри контейнера, сконструированного специально под элементы ActiveX.

В элементах ActiveX используется несколько программных компонентов, эффективно взаимодействующих с контейнером элемента ActiveX и его пользовате­лем.

ООП и СОМ

При разработке и использовании COM активно применяются средства объектно-ориентированного программирования. Однако в понятии “объект” в ООП и COM есть различия.

В ООП объекты являются экземплярами класса при выполнении программы. Вы не можете работать с объектом во время разработки программы; вы можете работать только с классами.

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