Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы


Функция обратного вызова DDEML


Когда сервер или клиент регистрирует себя в библиотеке DDEML при помощи функции DdeInitialize, он указывает адрес переходника, созданного для функции обратного вызова. Функция обратного вызова предназначена для обработки всех событий, возникающих в процессе создания каналов связи и передачи данных.

В простейшем случае функция обратного вызова сервера DDEML может выглядеть следующим образом:

HDDEDATA EXPENTRY _export DDEServerCallback( WORD wType, // код транзакции WORD wFmt, // формат данных HCONV hConv, // идентификатор канала HSZ hsz1, // первый идентификатор строки HSZ hsz2, // второй идентификатор строки HDDEDATA hData, // идентификатор глобальной области данных DWORD dwData1, // первое дополнительное двойное слово DWORD dwData2) // второе дополнительное двойное слово { switch(wType) { // Создание канала передачи данных case XTYP_CONNECT: { ........... return((HDDEDATA)TRUE); }

// Запрос данных от сервера case XTYP_REQUEST: { ........... return(hData); }

// Запрос на выполнение команды case XTYP_EXECUTE: ........... break;

// Передача данных серверу case XTYP_POKE: { ........... return((HDDEDATA)DDE_FACK); }

// Подтверждение создания канала case XTYP_CONNECT_CONFIRM: { ........... break; }

// Завершение работы канала case XTYP_DISCONNECT: { ........... break; }

// Ошибка case XTYP_ERROR: { ........... break; } } return((HDDEDATA)NULL); }

Функция обратного вызова должна быть определена как экспортируемая, поэтому мы указали ключевое слово _export.

Через первый параметр wType передается код транзакции. Подобно функции окна, которая обрабатывает сообщения, функция обратного вызова DDEML выполняет обработку транзакций. В зависимости от кода транзакции и результата обработки функция обратного вызова DDEML возвращает то или иное значение.

Второй параметр задает код формата передаваемых данных. Для кодов формата используются те же значения, что и для форматов Clipboard, например, CF_TEXT.

Через параметр hConv передается идентификатор канала передачи данных (который мы еще не научились создавать).




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



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