CDDEML: Demonstrates using MFC with DDEML

CDDEML is a sample application written using the
Microsoft(R) Foundation Classes (MFC).

CDDEML contains two applications that demonstrate a DDEML
 server and DDEML client in MFC applications. The sample
defines four new classes to help implement the DDEML
support.  These classes are: CDDEClient, CDDEClientConv,
CDDEServer, and CDDEServerConv.

The CDDEClient and CDDEServer classes encasulate the
functionality of a DDEML client or server. The
CDDEClientConv and CDDEServerConv encapsulate individual
conversations which are managed by the CDDEClient or
CDDEServer classes. The CDDEClient and CDDEServer classes
maintain a map of the current conversations acording to
the conversations handle. Using this map a the server or
client can look up any ongoing conversation based on its
handle.

These classes were designed to implement DDEML in a very
general way. As a result, these classes don't do very much
by themselves. They are designed to be reused in an
application by deriving from each of these classes.
Typically, an application will derive one class from
CDDEClient or CDDEServer. The derived class will contain
details such as what conversations are supported, and how
to handle callbacks that don't relate to a specific
conversation. Usually there is only one instance of this
class in an application.  An application may derive many
classes from CDDEClientConv or CDDEServerConv, depending
on how many different types of conversations the
application supports. These derived classes implement how
each conversion handles callbacks. They also may contain
buffers to store data from the
conversation, or pointers to other objects that they need
to comunicate with. The sample contains a client and
server application built using the classes mentioned
above.

One difficulty in writting DDEML classes, is how to handle
the DDEML callback function. In this sample, the DDEML
callback function is containted in the CDDEClient or
CDDEServer class.  The callback function first checks to
see if the transaction is for the client or server, or for
one of the conversations. If it is for the client or
server, then the callback function calls the member
function that handles that transaction.

If the transaction is for a conversation, the the callback
function looks up the pointer to the conversation object
using the handle of the conversation in the conversation
map. Then it calls the member function of the conversation
that handles that transaction. Therefore, by using these
classes, an application developer does not need to write a
DDEML callback function.

CDDEML requires Microsoft C/C++ version 7.0. It was built
and tested with Microsoft Windows(TM) version 3.1.

KEYWORDS: CD3; afx
