На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Multiple Conversations



A client application can use the DdeConnectList function to determine whether any servers of interest are available in the system. A client specifies a service name and topic name when it calls DdeConnectList, causing the DDEML to broadcast the XTYP_WILDCONNECT transaction to the DDE callback functions of all servers that match the service name (except those that filter the transaction). A server's callback function should return a data handle that identifies a null-terminated array of HSZPAIR structures. The array should contain one structure for each service name and topic name pair that matches the pair specified by the client. The DDEML establishes a conversation for each HSZPAIR structure filled by the server and returns a conversation list handle to the client. The server receives the conversation handle by way of the XTYP_CONNECT_CONFIRM transaction (unless the server filters this transaction).

A client can specify NULL for the service name, topic name, or both when it calls DdeConnectList. If the service name is NULL, all servers in the system that support the specified topic name respond. A conversation is established with each responding server, including multiple instances of the same server. If the topic name is NULL, a conversation is established on each topic recognized by each server that matches the service name.
A client can use the DdeQueryNextServer and DdeQueryConvInfo functions to identify the servers that respond to DdeConnectList. DdeQueryNextServer returns the next conversation handle in a conversation list, and DdeQueryConvInfo fills a CONVINFO structure with information about the conversation. The client can keep the conversation handles that it needs and discard the rest from the conversation list.

The following example uses DdeConnectList to establish conversations with all servers that support the System topic and then uses the DdeQueryNextServer
and DdeQueryConvInfo functions to obtain the servers' service name string handles and store them in a buffer.

HCONVLIST hconvList; /* conversation list */
DWORD idInst; /* instance identifier */
HSZ hszSystem; /* System topic */
HCONV hconv = NULL; /* conversation handle */
CONVINFO ci; /* holds conversation data */
UINT cConv = 0; /* count of conv. handles */
HSZ *pHsz, *aHsz; /* point to string handles */

/* Connect to all servers that support the System topic. */

hconvList = DdeConnectList(idInst, NULL, hszSystem, NULL, NULL);


/* Count the number of handles in the conversation list. */

while ((hconv = DdeQueryNextServer(hconvList, hconv)) != NULL)
cConv++;

/* Allocate a buffer for the string handles. */

hconv = NULL;
aHsz = (HSZ *) LocalAlloc(LMEM_FIXED, cConv * sizeof(HSZ));

/* Copy the string handles to the buffer. */

pHsz = aHsz;
while ((hconv = DdeQueryNextServer(hconvList, hconv)) != NULL) {
DdeQueryConvInfo(hconv, QID_SYNC, (PCONVINFO) &ci);
DdeKeepStringHandle(idInst, ci.hszSvcPartner);

*pHsz++ = ci.hszSvcPartner;
}

.
. /* Use the handles; converse with the servers. */
.

/* Free the memory and terminate the conversations. */

LocalFree((HANDLE) aHsz);
DdeDisconnectList(hconvList);


An application can terminate an individual conversation in a conversation list by calling the DdeDisconnect function. An application can terminate all conversations in a conversation list by calling the DdeDisconnectList function. Both functions cause the DDEML to send XTYP_DISCONNECT transactions to each partner's DDE callback function. DdeDisconnectList sends an XTYP_DISCONNECT transaction for each conversation handle in the list.

A client can retrieve a list of the conversation handles in a conversation list by passing an existing conversation list handle to DdeConnectList. The enumeration process removes the handles of terminated conversations from the list, and nonduplicate conversations that fit the specified service name and topic name are added.
If DdeConnectList specifies an existing conversation list handle, the function creates a new conversation list that contains the handles of any new conversations and the handles from the existing list.

If duplicate conversations exist, DdeConnectList attempts to prevent duplicate conversation handles in the conversation list. A duplicate conversation is a second conversation with the same server on the same service name and topic name. Two such conversations would have different handles, yet they would identify the same conversation.


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Многочисленная Беседа



Приложение клиента может использовать функцию DdeConnectList, чтобы определять что независимо любые серверы интереса доступны в системе. Клиент определяет имя услуги и имени темы когда он называет DdeConnectList, вызывающее DDEML, чтобы транслировать сделку XTYP_WILDCONNECT в функции возврата DDE всех серверов, которые соответствуют имени услуги (кроме те которые фильтруют сделку). Функция возврата сервера должна возвращать ручку данных, которая идентифицирует недействительный расторгнутый массив структур HSZPAIR. Массив должен содержать одну структуру для каждого имени услуги и пара имени темы, что соответствует паре определялся клиентом. DDEML Устанавливает разговор для каждой структуры HSZPAIR заполненной сервером и возвращает ручку списка разговора клиенту. Сервер получает ручку разговора посредством сделки XTYP_CONNECT_CONFIRM (если сервер не фильтрует эту сделку).

Клиент может определить НЕДЕЙСТВИТЕЛЬНЫЙ для имени услуги, имени темы, или обоих когда он называет DdeConnectList. Если имя услуги НЕДЕЙСТВИТЕЛЬНО, все серверы в системе, которая поддерживает ответ имени определенной темы. Разговор установлен каждым ответом сервера, включая многочисленные примеры того же самого сервера. Если имя темы НЕДЕЙСТВИТЕЛЬНО, разговор установлен в каждой теме признавал каждым сервером, что соответствует имени услуги.
Клиент может использовать DdeQueryNextServer и функции DdeQueryConvInfo, чтобы идентифицировать серверы, которые реагируют на DdeConnectList. DdeQueryNextServer ВОЗВРАЩАЕТ следующую ручку разговора в список разговора, и DdeQueryConvInfo заполняет структуру CONVINFO информацией о разговоре. Клиент может держать ручки разговора, что ему нужно и отвергать остальные из списка разговора.

Следующий пример использует DdeConnectList, чтобы устанавливать беседу со всеми серверами, которые поддерживают тему Системы затем используют DdeQueryNextServer и функции DdeQueryConvInfo, чтобы получать строку имени услуги серверов оперирует и загружает их в буфере.

HCONVLIST hconvList; /* список разговора */ DWORD idInst; /* идентификатор примера */ HSZ hszSystem; /* Тема Системы */ HCONV hconv = НЕДЕЙСТВИТЕЛЬНЫЙ; /* ручка разговора */ ci CONVINFO; /* данные разговора хранилищ */ UINT cConv = 0; /* счет conv. оперируется */ HSZ *pHsz, *aHsz; /* точка, чтобы нанизывать ручки */

/* Подключите ко всем серверам, которые поддерживают Систему topic. */

hconvList = DdeConnectList(idInst, НЕДЕЙСТВИТЕЛЬНЫЙ, hszSystem, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ);


/* Посчитайте количеством ручек в разговор list. */

пока ((hconv = DdeQueryNextServer(hconvList, hconv)) != НЕДЕЙСТВИТЕЛЬНЫЙ) cConv++;

/* Распределите буфер для строки handles. */

hconv = НЕДЕЙСТВИТЕЛЬНЫЙ;
aHsz = (HSZ *) LocalAlloc(LMEM_FIXED, cConv * sizeof(HSZ));

/* Скопируйте ручки строки в buffer. */

pHsz = aHsz;
пока ((hconv = DdeQueryNextServer(hconvList, hconv)) != НЕДЕЙСТВИТЕЛЬНЫЙ) { DdeQueryConvInfo(hconv, QID_SYNC, (PCONVINFO) &ci);
DdeKeepStringHandle(idInst, ci.hszSvcPartner);

*pHsz++ = ci.hszSvcPartner;
}

.
. /* Используйте ручки; преобразовайте servers. */
.

/* Освободите память и завершайте conversations. */

LocalFree((РУЧКА) aHsz);
DdeDisconnectList(hconvList);


Приложение может завершить индивидуальный разговор в списке разговора вызывая функцию DdeDisconnect. Приложение может завершить всю беседу в списке разговора вызывая функцию DdeDisconnectList. Обе причины функций DDEML, чтобы посылать сделки XTYP_DISCONNECT в каждую функцию возврата партнера DDE. DdeDisconnectList ПОСЫЛАЕТ сделку XTYP_DISCONNECT для каждой ручки разговора в списке.

Клиент может извлечь список ручек разговора в список разговора передавая ручку списка существующего разговора на DdeConnectList. Процесс перечисления удаляет ручкам расторгнутой беседы из списка, и nonduplicate беседы, которые устанавливают определенное имя услуги и имя темы добавлено.
Если DdeConnectList определяет ручку списка существующего разговора, функция создает новый список разговора, который содержит ручки любой новой беседы и ручки из существующего списка.

Если двойная беседа существует, попытки DdeConnectList, чтобы предохранять двойные ручки разговора в списке разговора. Двойной разговор является разговором секунды с тем же сервером в том же имени услуги и имени темы. Две таких беседы должны иметь другие ручки, пока они должны идентифицировать тот же разговор.


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz