Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Тема 7. Обмен сообщениями. Протокол DDE

Тема 6.???Интеграция при помощи промежуточного буфера

Интерфейсы.

Интересное явление – обеспечение интерфейсов классов. Интерфейс – это список прототипов, каждый из которых содержит только описание свойств и методов. В теории класс может наследовать один или несколько интерфейсов. В конечном классе должен быть указан код для всех наследуемых Public методов.

В VBA для того чтобы указать, что данный класс обеспечивает интерфейс другого класса, надо в общей области написать оператор IMPLEMENTS имя класса. В стандартных модулях не допускается обеспечение интерфейсов. Важно: VB не поддерживает наследование классов, а только интерфейсов.

Такое взаимодействие выглядит следующим образом: одно приложение помещает некоторые данные в буфер (буфер обмена, чаще – файл), затем буфер доставляется по месту работы второго приложения, которое извлекает требуемую информацию. Промежуточный файл удобен для организации асинхронного взаимодействия, то есть такого, когда общающиеся приложения не работают одновременно.

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

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

 

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

Но лучше сначала запустить серверное приложение при помощи команды SHELL, а затем установить канал связи с ним. Если, конечно, вы знаете, что пользователь уже запустил серверное приложение, а вы хотите управлять уже запущенным приложением, то вам требуется установить связь с уже запущенным приложением.

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

Основные команды протокола: DDEInitiate – открыть канал, DDEExecute – выполнить команду, DDETerminate – закрыть канал, DDETerminateAll – закрыть все каналы, DDEPoke – изменить данные на сервере, DDERequest – запросить информацию о сервере.

Рассмотрим пример, в котором сначала запускается при помощи команды Shell приложение MS Excel. Затем командой DDEInitiate открывается канал связи с темой «System». В следующем операторе выполняется DDE-команда OPEN. Параметр команды – имя открываемого файла, чтобы поместить имя в кавычки используется добавление символа «кавычки» по его ASCII-коду. Затем канал закрывается.

Dim lngChannel As Long

Dim strTopicList As String

RetVal = Shell("E:\Program Files\Microsoft Office\Office12\EXCEL.EXE", 1)

lngChannel = DDEInitiate(App:="Excel", Topic:="System")

DDEExecute Channel:=lngChannel, Command:="[OPEN(" & Chr(34) _

& "f:\Book.xls" & Chr(34) & ")]"

DDETerminate Channel:=lngChannel

Снова открывается канал, но уже с другой темой – именем открытого файла. При помощи команды DDEPOke выполняется изменение содержимого ячейки «А2» (задана в формате номер строки – номер колонки R2C1). Затем файл закрывается. Наконец закрывается канал.

lngChannel = DDEInitiate(App:="Excel", Topic:="f:\book.xls")

DDEPoke Channel:=lngChannel, Item:="R2C1", Data:="17777"

DDEExecute Channel:=lngChannel, Command:="[CLOSE]"

DDETerminate Channel:=lngChannel

В связи с недостаточной документацией предлагается исследовать, какие доступны темы, следующим образом (см. программу ниже). Полученный список можно вставить в документ.

lngChannel = DDEInitiate(App:="Excel", Topic:="System")

strTopicList = DDERequest(Channel:=lngChannel, Item:="Topics")

Selection.InsertAfter strTopicList

DDETerminate Channel:=lngChannel

Выяснив таким образом наличие темы «Лист2», можно открыть канал с этой темой и изменить значение в некоторой ячейке.

lngChannel = DDEInitiate(App:="Excel", Topic:="Лист2")

DDEPoke Channel:=lngChannel, Item:="R3C1", Data:="8888"

DDETerminateAll

<== предыдущая лекция | следующая лекция ==>
Автоматическая сборка мусора | Проблемы одновременного доступа
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 247; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.