Originally posted by http://msdn2.microsoft.com/en-us/library/ms648742(VS.85).aspx
The callback function is called asynchronously for transactions that do not involve the creation or termination of conversations. An application that does not frequently accept incoming messages will have reduced DDE performance because the Dynamic Data Exchange Management Library (DDEML) uses messages to initiate transactions.
An application must register the callback function by specifying a pointer to the function in a call to the DdeInitialize function.
Asynchronous callbacks are not supported.
From our wonderful beta docs
Remember that the use of callback functions is restricted to synchronous calls. This means that all the calls made to the callback function must be done before the callee returns. Asynchronous calls are not permitted and must not be attempted in any circumstances.