|
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.
| Last news from Greatis Software |
 |
|
Nostalgia .Net |
|
.Net is powerful, but not all-powerful, so sometimes we need to use Win32 API for our .Net applications. It's simple enough with Platform Invoke if you have Win32 skill, but we do not always have time to dig the ancient documentation, declare the special types that are compatible with Win32, find the values of the Win32's constants and so on. Nostalgia .Net offers several simple-to-use classes, and components that will allow you to forget about the headache of Win32 and just use the power of Win32 in your application the same way as you use the native. Net classes. More » |
| Recommended software for developers |
 |
|
Ultimate Pack |
|
Component pack for Delphi and C++ Builder that contains runtime form designer, runtime object inspector, print suite and much more for the very special price. More » |
 |
|
Form Designer .Net |
|
Unique runtime form design solution that allows to edit any form in .Net WinForms application at runtime with full source codes for only 300 euro! More » |
 |
|
Print Suite .Net |
|
Print Suite .Net is a set of components for easy printing texts, images and grids from your WinForms applications. Full C# source codes are available More » |
 |
|
Gradient Controls .Net |
|
Gradient Controls .Net offers controls with gradient background feature. Labels, panels and so on... Full C# source codes are available More » |
 |
|
Greatis iGrid |
|
iGrid plots drawing grid right over your desktop, so you can use it everywhere, with any drawing application without any special plugins for different graphic editors. More » |
All the contacts and projectsDmitry Vasiliev (just.dmitry)
Related LinksSoftware for Visual Studio .NET developers Software for Delphi and C++ Builder developers Software for Visual Basic 6 developers Delphi Tips&Tricks MegaDetailed.NET More Online Helps Win32 Programmer's Reference Win32 Multimedia Programmer's Reference OLE Programmer's Reference Microsoft Windows Pen API Programmer's Reference Microsoft Windows Sockets 2 Reference Microsoft Windows Telephony API (TAPI) Programmer's Reference Unix Manual Pages
|