INF: Freeing Memory in a DDEML Server Application

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