Before calling any other DDEML function, an application must call the DdeInitialize function. DdeInitialize obtains an instance identifier for the application, registers the application's DDE callback function with the DDEML, and specifies the transaction filter flags for the callback function.
Each instance of an application or a dynamic-link library (DLL) must pass its instance identifier as the idInst parameter to any other DDEML function that requires it. The purpose of multiple DDEML instances is to support DLLs that must use the DDEML at the same time an application is using it. An application must not use more than one instance of the DDEML.
Transaction filters optimize system performance by preventing the DDEML from passing unwanted transactions to the application's DDE callback function. An application sets the transaction filters when it calls DdeInitialize. An application must specify a transaction filter flag for each type of transaction that it does not process in its callback function. An application can change its transaction filters with a subsequent call to DdeInitialize. For a complete list of transaction filter flags, see the description of DdeInitialize in the Microsoft Win32 Programmer's Reference, Volume 3. For more information about transactions, see Transaction Management.
The following example shows how to initialize an application to use the DDEML.
DWORD idInst = 0;
HINSTANCE hinst;
.
.
.
DdeInitialize(&idInst, /* receives instance identifier */
(PFNCALLBACK) DdeCallback, /* address of callback function */
CBF_FAIL_EXECUTES | /* filter XTYPE_EXECUTE */
CBF_SKIP_ALLNOTIFICATIONS, /* filter notifications */
0);
.
.
.
An application must call the DdeUninitialize function when it is no longer going to use the DDEML. This function terminates any conversations currently open for the application and frees the DDEML resources the system allocated for the application.