Динамический обмен данными

В списке изучаемых в данной главе способов межпрограммного взаимодействия технология DDE (Dynamic Data Exchange – динамический обмен данными) является весьма старой; по древности ее опережает лишь буфер обмена.

Технология DDE была разработана в недрах Microsoft еще для первых версий Windows и с тех времен не претерпела серьезных изменений. Однако пожилой возраст технологии нельзя считать серьезным поводом для досрочного списания DDE со счетов. Одно из ключевых преимуществ DDE над современными методами совместной работы приложений заключается в малой требовательности к ресурсам компьютера (разве можно сравнить вычислительные возможности современного Pentium IV с компьютером на базе 286 микропроцессора, для которого создавалась DDE). К списку достоинств DDE стоит отнести и относительную простоту программной реализации этого процесса.

Основная задача DDE – обеспечить обмен данными между двумя приложениями: клиентом и сервером. В простейшем случае процесс передачи односторонний – клиент DDEинициирует процесс, запрашивая необходимые ему данные. Если сервер DDEв состоянии ответить на запрос, он отправляет требуемые данные клиенту DDE. Процесс передачи данных называют сеансом обмена DDE.

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

Открытие сеанса DDE инициируется на клиентской стороне. Эту операцию с некоторой степенью приближения можно сравнить с процессом заказа авиабилета по телефону. Вы набираете телефонный номер службы заказов, вступаете в разговор с оператором на тему «что летит в Магадан» и заказываете билет на устраивающий вас рейс. Если вы попытаетесь общаться с сервером на незнакомую ему тему или инициируете сеанс с искаженным именем сервиса, то, увы, сеанс DDE не состоится.

Для обмена данными протокол DDE предполагает отправку клиентским приложением запроса, включающего три элемента:

1. Определение имени сервиса (Service Name) обеспечит доступ к интересующему нас приложению-серверу DDE (аналог – набор телефонного номера службы заказа).

2. Указание, на какую тему (topic) вы хотите поговорить с сервером («что летит в Магадан»).

3. Выбор в теме соответствующего предмета обсуждения (item) – заказ билета.

Для разработки приложений, способных поддерживать сеанс DDE, в Delphi созданы четыре специальных класса: TDDEClientConv, TDDEClientItem, TDDEServerConv и TDDEServerItem. По их названиям можно догадаться, что два первых элемента управления специализируются на создании клиентских приложений, а два последних нацелены на реализацию приложения-сервера DDE.

Непосредственно за организацию контакта отвечают классы TDDEClientConv и TDDEServerConv.

На основе перечисленных классов реализованы невизуальные компоненты; они размещены на странице System палитры компонентов Delphi.