Средства разработки приложений


Описание протокола DDE - часть 5


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

Функция возвращает идентификатор созданного канала связи. В случае ошибки функция вернет нулевое значение. Полученный идентификатор канала необходимо хранить в течение всего сеанса связи.

Когда приложение завершает работу с каналом, оно должно закрыть его, вызвав функцию DdeDisconnect:

BOOL WINAPI DdeDisconnect(HCONV hConv);

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

После того, как был создан канал связи, можно начинать обмен данными. Обмен происходит посредством транзакций с помощью функции DdeClientTransaction и функции обратного вызова DdeCallbackFunction. Если приложение (независимо от того, клиент или сервер) хочет отправить данные, то оно должно подготовить их, оформить контекст с помощью функций библиотеки DDEML , а потом вызвать функцию DdeClientTransaction. При этом принимающему приложению будет отправлено сообщение, которое осуществит вызов функцию обратного вызова принимающей стороны. Функции обратного вызова представляют особой обработчик с множественным ветвлением, каждая ветвь которого обрабатывает соответствующую ей транзакцию. Если транзакция не поддерживается, то функция обратного вызова должна вернуть нулевое значение, иначе – один из допустимых для обработанной транзакции, кодов возврата.

Функция обратного вызова имеет следующий заголовок:

HDDEDATA EXPENTRY  DdeCallbackFunction(

WORD wType,

WORD wFmt,

HCONV hConv,

HSZ hsz1,

HSZ hsz2,

HDDEDATA hData,

DWORD dwData1,

DWORD dwData2

);

где:

  • wType -  Код транзакции. Коды транзакций предопределены протоколом DDE. Значения и названия соответствующих им констант можно посмотреть в технической документации. Забегая вперед, отмечу, что в нашем примере будут использоваться транзакции XTYP_ADVSTART для запуска потока данных по каналу, XTYP_ADVSTOP – для остановки потока данных, XTYP_ADVDATA – транзакция с уведомлением наличии данных от сервера.
  • wFmt – формат данных (в нашем случае данные представляют собой текстовую строку, поэтому этому параметру при вызове будет присвоено значение CF_TEXT, равное единице).
  • hConv – идентификатор канала.


    Начало  Назад  Вперед



    Книжный магазин