Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по СПр.doc
Скачиваний:
6
Добавлен:
16.12.2018
Размер:
690.69 Кб
Скачать

1.1.4 Контрольные вопросы к лабораторной работе 1

  1. Какова структура данных сообщения и какие данные содержат ее поля? Что порождает сообщения и какой программный комплекс занимается рассылкой сообщений по очередям? Какие очереди сообщений вы знаете?

  2. С помощью каких функций Windows API можно организовать посылку сообщения окну данного потока или окну другого потока? Какие виды сообщений можно послать?

  3. Каким образом в Delphi можно организовать обработку нестандартного сообщения (двумя различными методами класса формы)?

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

  5. Какой максимальный объем данных можно передать с помощью обычного сообщения? Какое сообщение позволяет передавать большие объемы данных?

  6. Опишите назначение полей сообщения WM_COPYDATA.

  7. Служит ли функция SendMessage для посылки синхронных сообщений потокам?

  8. Какие поля содержит структура данных, являющаяся сообщением?

  9. Укажите подходы к организации обработки сообщений в программах, разработанных с помощью иерархии классов Delphi.

  10. Какая именованная константа используется для обозначения верхней границы зарезервированных операционной системой идентификаторов сообщений?

  11. Каков объем данных, которые можно отправить потоку с помощью обычного сообщения?

  12. Каков объем данных, которые можно отправить потоку с помощью сообщения WM_COPYDATA?

  13. Каков объем данных, расположенных в поле Msg структуры данных сообщения (его идентификаторе)?

1.2 Лабораторная работа №2. Обмен данными между приложениями с использованием технологии динамического обмена данными – Dynamic Data Exchange (dde)

Цель работы: приобрести навыки создания клиентских и пользовательских приложений, осуществляющих обмен различными данными между параллельно работающими приложениями при помощи технологии обмена DDE, основанной на сообщениях.

1.2.1 Краткие теоретические сведения

Динамический обмен данными Data Dynamic Exchange (DDE) - это протокол, поддер­живающий передачу данных между приложениями, работающими в среде Windows.

Передача данных между приложениями может осуществляться различными способами. Наиболее часто используется область об­мена данными (clipboard). В этом случае говорят о статическом обмене данными: одно приложение помещает данные в область обмена, а затем содержимое этой области может быть использовано другим приложением. Обычно такой обмен данными выполняется при непосредственном участии пользователя.

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

Основные принципы DDE

При динамическом обмене данными две программы входят в соглашение об обмене. Одна из программ (запрашивающая дан­ные) становится клиентом, а другая (являющаяся источником данных) сервером.

Сообщения DDE

Протокол DDE основан на использовании 9 сообщениях:

wm_DDE_Initiate Начать сеанс обмена данными

wm_DDE_Terminate Завершить сеанс обмена данными

wm_DDE_Execute Выполнить команду на сервере

wm_DDE_Ack Получить статус операции

wm_DDE_Poke Послать данные серверу

wm_DDE_Request Запросить данные сервера

wm_DDE_Advise Установить связь с сервером

wm_DDE_UnAdvise Завершить связь с сервером

wm_DDE_Data Передать данные клиенту

Формат сообщений

Обычно сеанс динамического обмена данными состоит из посыл­ки ряда сообщений, общая форма которых имеет следующий вид:

PostMessage(hWndReceiver, wm_DDE_XXX, hWndSender, Data);

hWndReceiver - это ссылка на окно программы-клиента, hWndSender - ссылка на окно программы-сервера, wm_DDE_XXX - одно из девяти сообщений DDE. Значение последнего параметра - Data – зависит от типа передава­емого сообщения. Этот параметр может содержать атомы, ссылки на глобальные данные и т.п.

Атомы

Названия приложения (application), темы (topic) и элемента данных (item) представляют собой строки. Такие строки представ­ляются в виде атомов - 16-битных ссылок на таблицу, в которой хранятся эти строки. Существуют локальные атомы, доступные только конкретному приложению, и глобальные атомы, доступные всем приложениям. При передаче строки от одного приложения к другому строка заносится в таблицу глобальных атомов. Атом пе­ресылается с помощью сообщения и получатель извлекает строку из таблицы атомов. Для работы с таблицами атомов могут быть использованы следующие функции:

GlobalAddAtom Создать глобальный атом на основе строки

GlobalDeleteAtom Удалить глобальный атом

GlobalFindAtom Найти атом, соответствующий данной строке

GlobalGetAtomName Скопировать строку, соответствующую данному атому

Также существуют функции для работы с локальными атомами: LocalAddAtom, LocalDeleteAtom, LocalFindAtom и LocalGetAtomName. При использовании атомов следует придер­живаться следующего простого правила: программа, посылающая сообщение, должна занести атом в таблицу, а программа, получа­ющая сообщение, должна удалить атом из таблицы.

Ниже приводятся примеры использования функций работы с атомами.

Создание атома:

Var

Topic :TAtom;

Topic:=GlobalAddAtom('SomeTopic');

Поиск атома:

MyAtom:=GlobalFindAtom('SomeTopic');

Получение строки:

Var

Buffer: Array[0..39] of Char;

GlobalGetAtomName(MyAtom, Buffer, SizeOf(Buffer));

Как видно из приведенных примеров, использовать атомы очень просто, но они играют чрезвычайно важную роль при динамиче­ском обмене данными. Мы увидим это позже.