text: #ifndef _DDEML_H
  #define _DDEML_H
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  #define EXPENTRY	CALLBACK
  #define CP_WINANSI	1004
  #define CP_WINUNICODE	1200
  #define XTYPF_NOBLOCK	2
  #define XTYPF_NODATA	4
  #define XTYPF_ACKREQ	8
  #define XCLASS_MASK	0xFC00
  #define XCLASS_BOOL	0x1000
  #define XCLASS_DATA	0x2000
  #define XCLASS_FLAGS	0x4000
  #define XCLASS_NOTIFICATION	0x8000
  #define XST_NULL	0
  #define XST_INCOMPLETE	1
  #define XST_CONNECTED	2
  #define XST_INIT1	3
  #define XST_INIT2	4
  #define XST_REQSENT	5
  #define XST_DATARCVD	6
  #define XST_POKESENT	7
  #define XST_POKEACKRCVD	8
  #define XST_EXECSENT	9
  #define XST_EXECACKRCVD	10
  #define XST_ADVSENT 11
  #define XST_UNADVSENT 12
  #define XST_ADVACKRCVD 13
  #define XST_UNADVACKRCVD 14
  #define XST_ADVDATASENT 15
  #define XST_ADVDATAACKRCVD 16
  #define XTYP_ERROR	(XCLASS_NOTIFICATION|XTYPF_NOBLOCK)
  #define XTYP_ADVDATA	(16|XCLASS_FLAGS)
  #define XTYP_ADVREQ	(32|XCLASS_DATA|XTYPF_NOBLOCK)
  #define XTYP_ADVSTART	(0x30|XCLASS_BOOL)
  #define XTYP_ADVSTOP	(0x0040|XCLASS_NOTIFICATION)
  #define XTYP_EXECUTE	(0x0050|XCLASS_FLAGS)
  #define XTYP_CONNECT	(0x0060|XCLASS_BOOL|XTYPF_NOBLOCK)
  #define XTYP_CONNECT_CONFIRM	(0x0070|XCLASS_NOTIFICATION|XTYPF_NOBLOCK)
  #define XTYP_XACT_COMPLETE	(0x0080|XCLASS_NOTIFICATION)
  #define XTYP_POKE	(0x0090|XCLASS_FLAGS)
  #define XTYP_REGISTER	(0x00A0|XCLASS_NOTIFICATION|XTYPF_NOBLOCK)
  #define XTYP_REQUEST	(0x00B0|XCLASS_DATA)
  #define XTYP_DISCONNECT	(0x00C0|XCLASS_NOTIFICATION|XTYPF_NOBLOCK)
  #define XTYP_UNREGISTER	(0x00D0|XCLASS_NOTIFICATION|XTYPF_NOBLOCK)
  #define XTYP_WILDCONNECT	(0x00E0|XCLASS_DATA|XTYPF_NOBLOCK)
  #define XTYP_MASK	0xF0
  #define XTYP_SHIFT	4
  #define TIMEOUT_ASYNC	0xFFFFFFFF
  #define QID_SYNC	0xFFFFFFFF
  #define ST_CONNECTED	1
  #define ST_ADVISE	2
  #define ST_ISLOCAL	4
  #define ST_BLOCKED	8
  #define ST_CLIENT	16
  #define ST_TERMINATED	32
  #define ST_INLIST	64
  #define ST_BLOCKNEXT	128
  #define ST_ISSELF	256
  #define CADV_LATEACK 0xFFFF
  #define DMLERR_NO_ERROR	0
  #define DMLERR_FIRST	0x4000
  #define DMLERR_ADVACKTIMEOUT	0x4000
  #define DMLERR_BUSY	0x4001
  #define DMLERR_DATAACKTIMEOUT	0x4002
  #define DMLERR_DLL_NOT_INITIALIZED	0x4003
  #define	DMLERR_DLL_USAGE	0x4004
  #define DMLERR_EXECACKTIMEOUT	0x4005
  #define DMLERR_INVALIDPARAMETER	0x4006
  #define DMLERR_LOW_MEMORY	0x4007
  #define DMLERR_MEMORY_ERROR	0x4008
  #define DMLERR_NOTPROCESSED	0x4009
  #define DMLERR_NO_CONV_ESTABLISHED	0x400a
  #define DMLERR_POKEACKTIMEOUT	0x400b
  #define DMLERR_POSTMSG_FAILED	0x400c
  #define DMLERR_REENTRANCY	0x400d
  #define DMLERR_SERVER_DIED	0x400e
  #define DMLERR_SYS_ERROR	0x400f
  #define DMLERR_UNADVACKTIMEOUT	0x4010
  #define DMLERR_UNFOUND_QUEUE_ID	0x4011
  #define DMLERR_LAST	0x4011
  #define DDE_FACK	0x8000
  #define DDE_FBUSY	0x4000
  #define DDE_FDEFERUPD	0x4000
  #define DDE_FACKREQ	0x8000
  #define DDE_FRELEASE	0x2000
  #define DDE_FREQUESTED	0x1000
  #define DDE_FAPPSTATUS	0x00ff
  #define DDE_FNOTPROCESSED	0
  #define DDE_FACKRESERVED	(~(DDE_FACK|DDE_FBUSY|DDE_FAPPSTATUS))
  #define DDE_FADVRESERVED	(~(DDE_FACKREQ|DDE_FDEFERUPD))
  #define DDE_FDATRESERVED	(~(DDE_FACKREQ|DDE_FRELEASE|DDE_FREQUESTED))
  #define DDE_FPOKRESERVED	(~DDE_FRELEASE)
  #define MSGF_DDEMGR	0x8001
  #define CBR_BLOCK	((HDDEDATA)0xffffffff)
  #define CBF_FAIL_SELFCONNECTIONS	0x1000
  #define CBF_FAIL_CONNECTIONS	0x2000
  #define CBF_FAIL_ADVISES	0x4000
  #define CBF_FAIL_EXECUTES	0x8000
  #define CBF_FAIL_POKES	0x10000
  #define CBF_FAIL_REQUESTS	0x20000
  #define CBF_FAIL_ALLSVRXACTIONS	0x3f000
  #define CBF_SKIP_CONNECT_CONFIRMS	0x40000
  #define CBF_SKIP_REGISTRATIONS	0x80000
  #define CBF_SKIP_UNREGISTRATIONS	0x100000
  #define CBF_SKIP_DISCONNECTS	0x200000
  #define CBF_SKIP_ALLNOTIFICATIONS	0x3c0000
  #define APPCMD_CLIENTONLY	0x10L
  #define APPCMD_FILTERINITS	0x20L
  #define APPCMD_MASK	0xFF0L
  #define APPCLASS_STANDARD	0
  #define APPCLASS_MASK	0xFL
  #define EC_ENABLEALL	0
  #define EC_ENABLEONE	ST_BLOCKNEXT
  #define EC_DISABLE	ST_BLOCKED
  #define EC_QUERYWAITING	2
  #define DNS_REGISTER	1
  #define DNS_UNREGISTER	2
  #define DNS_FILTERON	4
  #define DNS_FILTEROFF	8
  #define HDATA_APPOWNED	1
  #define MAX_MONITORS	4
  #define APPCLASS_MONITOR	1L
  #define XTYP_MONITOR	(XCLASS_NOTIFICATION|XTYPF_NOBLOCK|0xF0)
  #define MF_HSZ_INFO	0x1000000
  #define MF_SENDMSGS	0x2000000
  #define MF_POSTMSGS	0x4000000
  #define MF_CALLBACKS	0x8000000
  #define MF_ERRORS	0x10000000
  #define MF_LINKS	0x20000000
  #define MF_CONV	0x40000000
  #define MF_MASK 0xFF000000
  
  DECLARE_HANDLE(HCONVLIST);
  DECLARE_HANDLE(HCONV);
  DECLARE_HANDLE(HSZ);
  DECLARE_HANDLE(HDDEDATA);
  typedef HDDEDATA CALLBACK FNCALLBACK(UINT,UINT,HCONV,HSZ,HSZ,HDDEDATA,DWORD,DWORD);
  typedef HDDEDATA(CALLBACK *PFNCALLBACK)(UINT,UINT,HCONV,HSZ,HSZ,HDDEDATA,DWORD,DWORD);
  typedef struct tagHSZPAIR {
  	HSZ	hszSvc;
  	HSZ	hszTopic;
  } HSZPAIR, *PHSZPAIR;
  typedef struct tagCONVCONTEXT {
  	UINT	cb;
  	UINT	wFlags;
  	UINT	wCountryID;
  	int	iCodePage;
  	DWORD	dwLangID;
  	DWORD	dwSecurity;
  	SECURITY_QUALITY_OF_SERVICE qos;
  } CONVCONTEXT,*PCONVCONTEXT;
  typedef struct tagCONVINFO {
  	DWORD	cb;
  	DWORD	hUser;
  	HCONV	hConvPartner;
  	HSZ	hszSvcPartner;
  	HSZ	hszServiceReq;
  	HSZ	hszTopic;
  	HSZ	hszItem;
  	UINT	wFmt;
  	UINT	wType;
  	UINT	wStatus;
  	UINT	wConvst;
  	UINT	wLastError;
  	HCONVLIST	hConvList;
  	CONVCONTEXT ConvCtxt;
  	HWND	hwnd;
  	HWND	hwndPartner;
  } CONVINFO,*PCONVINFO;
  typedef struct tagDDEML_MSG_HOOK_DATA {
  	UINT	uiLo;
  	UINT	uiHi;
  	DWORD	cbData;
  	DWORD	Data[8];
  } DDEML_MSG_HOOK_DATA;
  
  BOOL WINAPI DdeAbandonTransaction(DWORD,HCONV,DWORD);
  PBYTE WINAPI DdeAccessData(HDDEDATA,PDWORD);
  HDDEDATA WINAPI DdeAddData(HDDEDATA,PBYTE,DWORD,DWORD);
  HDDEDATA WINAPI DdeClientTransaction(PBYTE,DWORD,HCONV,HSZ,UINT,UINT,DWORD,PDWORD);
  int WINAPI DdeCmpStringHandles(HSZ,HSZ);
  HCONV WINAPI DdeConnect(DWORD,HSZ,HSZ,PCONVCONTEXT);
  HCONVLIST WINAPI DdeConnectList(DWORD,HSZ,HSZ,HCONVLIST,PCONVCONTEXT);
  HDDEDATA WINAPI DdeCreateDataHandle(DWORD,PBYTE,DWORD,DWORD,HSZ,UINT,UINT);
  HSZ WINAPI DdeCreateStringHandleA(DWORD,LPSTR,int);
  HSZ WINAPI DdeCreateStringHandleW(DWORD,LPWSTR,int);
  BOOL WINAPI DdeDisconnect(HCONV);
  BOOL WINAPI DdeDisconnectList(HCONVLIST);
  BOOL WINAPI DdeEnableCallback(DWORD,HCONV,UINT);
  BOOL WINAPI DdeFreeDataHandle(HDDEDATA);
  BOOL WINAPI DdeFreeStringHandle(DWORD,HSZ);
  DWORD WINAPI DdeGetData(HDDEDATA,PBYTE,DWORD,DWORD);
  UINT WINAPI DdeGetLastError(DWORD);
  BOOL WINAPI DdeImpersonateClient(HCONV);
  UINT WINAPI DdeInitializeA(PDWORD,PFNCALLBACK,DWORD,DWORD);
  UINT WINAPI DdeInitializeW(PDWORD,PFNCALLBACK,DWORD,DWORD);
  BOOL WINAPI DdeKeepStringHandle(DWORD,HSZ);
  HDDEDATA WINAPI DdeNameService(DWORD,HSZ,HSZ,UINT);
  BOOL WINAPI DdePostAdvise(DWORD,HSZ,HSZ);
  UINT WINAPI DdeQueryConvInfo(HCONV,DWORD,PCONVINFO);
  HCONV WINAPI DdeQueryNextServer(HCONVLIST,HCONV);
  DWORD WINAPI DdeQueryStringA(DWORD,HSZ,LPSTR,DWORD,int);
  DWORD WINAPI DdeQueryStringW(DWORD,HSZ,LPWSTR,DWORD,int);
  HCONV WINAPI DdeReconnect(HCONV);
  BOOL WINAPI DdeSetUserHandle(HCONV,DWORD,DWORD);
  BOOL WINAPI DdeUnaccessData(HDDEDATA);
  BOOL WINAPI DdeUninitialize(DWORD);
  
  #ifdef UNICODE
  #define SZDDESYS_TOPIC	L"System"
  #define SZDDESYS_ITEM_TOPICS	L"Topics"
  #define SZDDESYS_ITEM_SYSITEMS	L"SysItems"
  #define SZDDESYS_ITEM_RTNMSG	L"ReturnMessage"
  #define SZDDESYS_ITEM_STATUS	L"Status"
  #define SZDDESYS_ITEM_FORMATS	L"Formats"
  #define SZDDESYS_ITEM_HELP	L"Help"
  #define SZDDE_ITEM_ITEMLIST	L"TopicItemList"
  #define DdeCreateStringHandle DdeCreateStringHandleW
  #define DdeInitialize DdeInitializeW
  #define DdeQueryString DdeQueryStringW
  #else
  #define SZDDESYS_TOPIC	"System"
  #define SZDDESYS_ITEM_TOPICS	"Topics"
  #define SZDDESYS_ITEM_SYSITEMS	"SysItems"
  #define SZDDESYS_ITEM_RTNMSG	"ReturnMessage"
  #define SZDDESYS_ITEM_STATUS	"Status"
  #define SZDDESYS_ITEM_FORMATS	"Formats"
  #define SZDDESYS_ITEM_HELP	"Help"
  #define SZDDE_ITEM_ITEMLIST	"TopicItemList"
  #define DdeCreateStringHandle DdeCreateStringHandleA
  #define DdeInitialize DdeInitializeA
  #define DdeQueryString DdeQueryStringA
  #endif
  #ifdef __cplusplus
  }
  #endif
  #endif /* _DDEML_H */
  