ID Number: Q83413
3.10
WINDOWS
Summary:
A Dynamic Data Exchange Management Library (DDEML) server application
calls the DdeCreateDataHandle function to allocate a block of memory
for data it will send to a client application. DdeCreateDataHandle
returns a handle to a block of memory that can be passed between
applications.
The server application owns every data handle it creates. However, it
is not necessary to call DdeFreeDataHandle under every circumstance.
This article details the circumstances under which the server
application must call DdeFreeDataHandle and when the DDEML will
automatically free a data handle.
More Information:
If the server application specifies the HDATA_APPOWNED flag in the
afCmd parameter to DdeCreateDataHandle, it must explicitly call
DdeFreeDataHandle to free the memory handle. Using HDATA_APPOWNED data
handles is convenient when data, such as system topic information, is
likely to be passed to a client application more than once, because the
server calls DdeCreateDataHandle only once, regardless of the number
of times the data handle is passed to a client application.
When it closes down, a server application must call DdeFreeDataHandle
for each data handle that it has not passed to a client application.
When the server creates a handle without specifying HDATA_APPOWNED,
and passes the handle to a client application in an asynchronous
transaction, the DDEML frees the data handle when the client returns
from its callback function. Therefore, the server is not required to
free the data handle it passes to a client because the DDEML frees the
handle. However, if the data handle is never sent to a client
application, the server must call DdeFreeDataHandle to free the
handle. It is the client application's responsibility to call
DdeFreeDataHandle for any data provided by a server in a synchronous
transaction.
Additional reference words: 3.10