Основы программирования в Win32API. Марапулец Ю.В. - 119 стр.

UptoLike

Составители: 

или сразу несколькими из перечисленных способов [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