Составители:
Рубрика:
или сразу несколькими из перечисленных способов [1, 2]:
– клиент запрашивает данные, а сервер отвечает на запрос;
– клиент просит проинформировать его, произошли ли изменения опре-
деленных данных;
– клиент просит автоматически передать определенные элементы дан-
ных в случае их обновления;
– клиент посылает команду, а сервер ее выполняет;
– клиент посылает серверу незапрашиваемый элемент данных.
Важно помнить о том, что приложение-клиент может также выступать в
роли сервера и наоборот. Любое приложение может одновременно быть
и сервером, и клиентом. Различия между клиентом и сервером являются весь-
ма искусственными и не вполне определенными, поскольку любой из них мо-
жет как запрашивать, так и передавать данные.
В своей основе DDE-диалог – это довольно сложный и запутанный про-
цесс, включающий многочисленные ответы и подтверждения с применением
разных протоколов. Поэтому для облегчения жизни программистов создана
специальная библиотека – DDEML (DDE Management Library).
DDEML входит в состав Windows и содержит высокоуровневые API-
функции, позволяющие упростить процесс DDE-диалога. Библиотека поддержи-
вает запись о каждом диалоге с помощью структуры CONVINFO,
которая содер-
жит информацию об участниках, установивших диалог, о запрашиваемых темах и
элементах, об используемых форматах и типах данных, а также о статусе диалога,
ошибках и т. д. Следует отметить, что большинство элементов этой структуры
можно просто проигнорировать, возложив все обязанности по ведению записей на
DDEML. Рассмотрим основные функции данной библиотеки.
9.2. Основные API-функции для динамического обмена данными
Функция DdeInitialize() предназначена для задания функции обратного
вызова, управляющей графиком DDE-сообщений. Когда приложение вызывает
функцию DdeInitialize, DDEML уведомляет об этом другие программы, от-
правляя сообщение XTYP_REGISTER
их функциям обратного вызова. Эти со-
общения используются многими клиентами для поддержки списка доступных
сервисов.
Необходимость указывать идентификатор экземпляра приложения при
вызове функции DdeInitialize() представляет собой дополнительное ограниче-
ние для программистов, работающих в среде Windows, поскольку этот иден-
тификатор является локальным для потока и не наследуется дочерними про-
цессами. А так как идентификатор экземпляра необходимо задавать
в качестве параметра большинства DDEML-операций, соответствующие опе-
рации должны находиться в том же самом потоке, в котором был осуществлен
вызов функции DdeInitialize(). Поток, инициализировавший DDE-сеанс, не
должен прекращаться вплоть до его завершения; в противном случае вы не
119
или сразу несколькими из перечисленных способов [1, 2]:
– клиент запрашивает данные, а сервер отвечает на запрос;
– клиент просит проинформировать его, произошли ли изменения опре-
деленных данных;
– клиент просит автоматически передать определенные элементы дан-
ных в случае их обновления;
– клиент посылает команду, а сервер ее выполняет;
– клиент посылает серверу незапрашиваемый элемент данных.
Важно помнить о том, что приложение-клиент может также выступать в
роли сервера и наоборот. Любое приложение может одновременно быть
и сервером, и клиентом. Различия между клиентом и сервером являются весь-
ма искусственными и не вполне определенными, поскольку любой из них мо-
жет как запрашивать, так и передавать данные.
В своей основе DDE-диалог – это довольно сложный и запутанный про-
цесс, включающий многочисленные ответы и подтверждения с применением
разных протоколов. Поэтому для облегчения жизни программистов создана
специальная библиотека – DDEML (DDE Management Library).
DDEML входит в состав Windows и содержит высокоуровневые API-
функции, позволяющие упростить процесс DDE-диалога. Библиотека поддержи-
вает запись о каждом диалоге с помощью структуры CONVINFO, которая содер-
жит информацию об участниках, установивших диалог, о запрашиваемых темах и
элементах, об используемых форматах и типах данных, а также о статусе диалога,
ошибках и т. д. Следует отметить, что большинство элементов этой структуры
можно просто проигнорировать, возложив все обязанности по ведению записей на
DDEML. Рассмотрим основные функции данной библиотеки.
9.2. Основные API-функции для динамического обмена данными
Функция DdeInitialize() предназначена для задания функции обратного
вызова, управляющей графиком DDE-сообщений. Когда приложение вызывает
функцию DdeInitialize, DDEML уведомляет об этом другие программы, от-
правляя сообщение XTYP_REGISTER их функциям обратного вызова. Эти со-
общения используются многими клиентами для поддержки списка доступных
сервисов.
Необходимость указывать идентификатор экземпляра приложения при
вызове функции DdeInitialize() представляет собой дополнительное ограниче-
ние для программистов, работающих в среде Windows, поскольку этот иден-
тификатор является локальным для потока и не наследуется дочерними про-
цессами. А так как идентификатор экземпляра необходимо задавать
в качестве параметра большинства DDEML-операций, соответствующие опе-
рации должны находиться в том же самом потоке, в котором был осуществлен
вызов функции DdeInitialize(). Поток, инициализировавший DDE-сеанс, не
должен прекращаться вплоть до его завершения; в противном случае вы не
119
Страницы
- « первая
- ‹ предыдущая
- …
- 117
- 118
- 119
- 120
- 121
- …
- следующая ›
- последняя »
