Differences From Artifact [cc5f44d13c1d8af5]:
- File        
src/win32/ddeml.d
- 2011-02-23 12:53:16 - part of checkin [c2b7a98c21] on branch trunk - Initial import (user: kinaba) [annotate]
 
 
To Artifact [80302d7833fbc86f]:
- File        
src/win32/ddeml.d
- 2015-04-21 10:46:55 - part of checkin [4e2933c620] on branch trunk - Rebased to the latest verson dmd 2.067. Not yet verified the outcome. (user: kinaba) [annotate]
 
 
            1  +/***********************************************************************\
            2  +*                                ddeml.d                                *
            3  +*                                                                       *
            4  +*                       Windows API header module                       *
            5  +*                                                                       *
            6  +*                 Translated from MinGW Windows headers                 *
            7  +*                           by Stewart Gordon                           *
            8  +*                                                                       *
            9  +*                       Placed into public domain                       *
           10  +\***********************************************************************/
     1     11   module win32.ddeml;
     2         -
     3         -// Translated from Microsoft Platform SDK August 2001 Edition
     4         -// by Y.Tomino
     5         -
     6         -import win32.windef;
     7         -
     8         -// #ifndef _INC_DDEMLH
     9         -// #define _INC_DDEMLH
    10         -
    11         -// #ifdef __cplusplus
    12         -// extern "C" {
    13         -// #endif /* __cplusplus */
    14         -
    15         -alias void* HCONVLIST;
    16         -alias void* HCONV;
    17         -alias void* HSZ;
    18         -alias void* HDDEDATA;
    19         -// #define EXPENTRY CALLBACK
    20         -
    21         -struct tagHSZPAIR {
    22         -  HSZ hszSvc;
    23         -  HSZ hszTopic;
    24         -}
    25         -alias tagHSZPAIR HSZPAIR;
    26         -
           12  +pragma(lib, "user32.lib");
           13  +
           14  +private import win32.basetsd, win32.windef, win32.winnt;
           15  +
           16  +enum : int {
           17  + CP_WINANSI    = 1004,
           18  + CP_WINUNICODE = 1200
           19  +}
           20  +
           21  +enum : UINT {
           22  + XTYPF_NOBLOCK = 2,
           23  + XTYPF_NODATA  = 4,
           24  + XTYPF_ACKREQ  = 8
           25  +}
           26  +
           27  +enum : UINT {
           28  + XCLASS_MASK         = 0xFC00,
           29  + XCLASS_BOOL         = 0x1000,
           30  + XCLASS_DATA         = 0x2000,
           31  + XCLASS_FLAGS        = 0x4000,
           32  + XCLASS_NOTIFICATION = 0x8000
           33  +}
           34  +
           35  +enum : UINT {
           36  + XST_NULL,
           37  + XST_INCOMPLETE,
           38  + XST_CONNECTED,
           39  + XST_INIT1,
           40  + XST_INIT2,
           41  + XST_REQSENT,
           42  + XST_DATARCVD,
           43  + XST_POKESENT,
           44  + XST_POKEACKRCVD,
           45  + XST_EXECSENT,
           46  + XST_EXECACKRCVD,
           47  + XST_ADVSENT,
           48  + XST_UNADVSENT,
           49  + XST_ADVACKRCVD,
           50  + XST_UNADVACKRCVD,
           51  + XST_ADVDATASENT,
           52  + XST_ADVDATAACKRCVD // = 16
           53  +}
           54  +
           55  +enum : UINT {
           56  + XTYP_ERROR           = XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
           57  + XTYP_ADVDATA         = 0x0010 | XCLASS_FLAGS,
           58  + XTYP_ADVREQ          = 0x0020 | XCLASS_DATA | XTYPF_NOBLOCK,
           59  + XTYP_ADVSTART        = 0x0030 | XCLASS_BOOL,
           60  + XTYP_ADVSTOP         = 0x0040 | XCLASS_NOTIFICATION,
           61  + XTYP_EXECUTE         = 0x0050 | XCLASS_FLAGS,
           62  + XTYP_CONNECT         = 0x0060 | XCLASS_BOOL | XTYPF_NOBLOCK,
           63  + XTYP_CONNECT_CONFIRM = 0x0070 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
           64  + XTYP_XACT_COMPLETE   = 0x0080 | XCLASS_NOTIFICATION,
           65  + XTYP_POKE            = 0x0090 | XCLASS_FLAGS,
           66  + XTYP_REGISTER        = 0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
           67  + XTYP_REQUEST         = 0x00B0 | XCLASS_DATA,
           68  + XTYP_DISCONNECT      = 0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
           69  + XTYP_UNREGISTER      = 0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
           70  + XTYP_WILDCONNECT     = 0x00E0 | XCLASS_DATA | XTYPF_NOBLOCK,
           71  + XTYP_MONITOR         = 0X00F0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
           72  + XTYP_MASK            = 0x00F0,
           73  + XTYP_SHIFT           = 4
           74  +}
           75  +
           76  +/+
           77  +#define TIMEOUT_ASYNC  0xFFFFFFFF
           78  +#define QID_SYNC       0xFFFFFFFF
           79  ++/
           80  +
           81  +enum : UINT {
           82  + ST_CONNECTED  =   1,
           83  + ST_ADVISE     =   2,
           84  + ST_ISLOCAL    =   4,
           85  + ST_BLOCKED    =   8,
           86  + ST_CLIENT     =  16,
           87  + ST_TERMINATED =  32,
           88  + ST_INLIST     =  64,
           89  + ST_BLOCKNEXT  = 128,
           90  + ST_ISSELF     = 256
           91  +}
           92  +
           93  +/+
           94  +#define CADV_LATEACK 0xFFFF
           95  ++/
           96  +
           97  +enum : UINT {
           98  + DMLERR_NO_ERROR      = 0,
           99  + DMLERR_FIRST         = 0x4000,
          100  + DMLERR_ADVACKTIMEOUT = DMLERR_FIRST,
          101  + DMLERR_BUSY,
          102  + DMLERR_DATAACKTIMEOUT,
          103  + DMLERR_DLL_NOT_INITIALIZED,
          104  + DMLERR_DLL_USAGE,
          105  + DMLERR_EXECACKTIMEOUT,
          106  + DMLERR_INVALIDPARAMETER,
          107  + DMLERR_LOW_MEMORY,
          108  + DMLERR_MEMORY_ERROR,
          109  + DMLERR_NOTPROCESSED,
          110  + DMLERR_NO_CONV_ESTABLISHED,
          111  + DMLERR_POKEACKTIMEOUT,
          112  + DMLERR_POSTMSG_FAILED,
          113  + DMLERR_REENTRANCY,
          114  + DMLERR_SERVER_DIED,
          115  + DMLERR_SYS_ERROR,
          116  + DMLERR_UNADVACKTIMEOUT,
          117  + DMLERR_UNFOUND_QUEUE_ID, // = 0x4011
          118  + DMLERR_LAST          = DMLERR_UNFOUND_QUEUE_ID
          119  +}
          120  +
          121  +/+
          122  +#define DDE_FACK 0x8000
          123  +#define DDE_FBUSY 0x4000
          124  +#define DDE_FDEFERUPD 0x4000
          125  +#define DDE_FACKREQ 0x8000
          126  +#define DDE_FRELEASE 0x2000
          127  +#define DDE_FREQUESTED 0x1000
          128  +#define DDE_FAPPSTATUS 0x00ff
          129  +#define DDE_FNOTPROCESSED 0
          130  +#define DDE_FACKRESERVED (~(DDE_FACK|DDE_FBUSY|DDE_FAPPSTATUS))
          131  +#define DDE_FADVRESERVED (~(DDE_FACKREQ|DDE_FDEFERUPD))
          132  +#define DDE_FDATRESERVED (~(DDE_FACKREQ|DDE_FRELEASE|DDE_FREQUESTED))
          133  +#define DDE_FPOKRESERVED (~DDE_FRELEASE)
          134  +#define MSGF_DDEMGR 0x8001
          135  +#define CBR_BLOCK ((HDDEDATA)0xffffffff)
          136  ++/
          137  +
          138  +const DWORD
          139  + APPCLASS_STANDARD         = 0,
          140  + APPCLASS_MONITOR          = 0x00000001,
          141  + APPCLASS_MASK             = 0x0000000F,
          142  + APPCMD_CLIENTONLY         = 0x00000010,
          143  + APPCMD_FILTERINITS        = 0x00000020,
          144  + APPCMD_MASK               = 0x00000FF0,
          145  + CBF_FAIL_SELFCONNECTIONS  = 0x00001000,
          146  + CBF_FAIL_CONNECTIONS      = 0x00002000,
          147  + CBF_FAIL_ADVISES          = 0x00004000,
          148  + CBF_FAIL_EXECUTES         = 0x00008000,
          149  + CBF_FAIL_POKES            = 0x00010000,
          150  + CBF_FAIL_REQUESTS         = 0x00020000,
          151  + CBF_FAIL_ALLSVRXACTIONS   = 0x0003f000,
          152  + CBF_SKIP_CONNECT_CONFIRMS = 0x00040000,
          153  + CBF_SKIP_REGISTRATIONS    = 0x00080000,
          154  + CBF_SKIP_UNREGISTRATIONS  = 0x00100000,
          155  + CBF_SKIP_DISCONNECTS      = 0x00200000,
          156  + CBF_SKIP_ALLNOTIFICATIONS = 0x003c0000,
          157  + MF_HSZ_INFO               = 0x01000000,
          158  + MF_SENDMSGS               = 0x02000000,
          159  + MF_POSTMSGS               = 0x04000000,
          160  + MF_CALLBACKS              = 0x08000000,
          161  + MF_ERRORS                 = 0x10000000,
          162  + MF_LINKS                  = 0x20000000,
          163  + MF_CONV                   = 0x40000000,
          164  + MF_MASK                   = 0xFF000000;
          165  +
          166  +enum : UINT {
          167  + EC_ENABLEALL    = 0,
          168  + EC_ENABLEONE    = ST_BLOCKNEXT,
          169  + EC_DISABLE      = ST_BLOCKED,
          170  + EC_QUERYWAITING = 2
          171  +}
          172  +
          173  +enum : UINT {
          174  + DNS_REGISTER   = 1,
          175  + DNS_UNREGISTER = 2,
          176  + DNS_FILTERON   = 4,
          177  + DNS_FILTEROFF  = 8
          178  +}
          179  +
          180  +/+
          181  +#define HDATA_APPOWNED 1
          182  +#define MAX_MONITORS 4
          183  ++/
          184  +
          185  +enum : int {
          186  + MH_CREATE  = 1,
          187  + MH_KEEP    = 2,
          188  + MH_DELETE  = 3,
          189  + MH_CLEANUP = 4
          190  +}
          191  +
          192  +alias HANDLE HCONVLIST, HCONV, HSZ, HDDEDATA;
          193  +
          194  +extern (Windows) alias HDDEDATA
          195  +  function(UINT, UINT, HCONV, HSZ, HSZ, HDDEDATA, DWORD, DWORD) PFNCALLBACK;
          196  +
          197  +struct HSZPAIR {
          198  + HSZ hszSvc;
          199  + HSZ hszTopic;
          200  +}
    27    201   alias HSZPAIR* PHSZPAIR;
    28    202   
    29         -struct tagCONVCONTEXT {
    30         -  UINT cb;
    31         -  UINT wFlags;
    32         -  UINT wCountryID;
    33         -  int iCodePage;
    34         -  DWORD dwLangID;
    35         -  DWORD dwSecurity;
    36         -  SECURITY_QUALITY_OF_SERVICE qos;
          203  +struct CONVCONTEXT {
          204  + UINT                        cb = CONVCONTEXT.sizeof;
          205  + UINT                        wFlags;
          206  + UINT                        wCountryID;
          207  + int                         iCodePage;
          208  + DWORD                       dwLangID;
          209  + DWORD                       dwSecurity;
          210  + SECURITY_QUALITY_OF_SERVICE qos;
    37    211   }
    38         -alias tagCONVCONTEXT CONVCONTEXT;
    39         -
    40    212   alias CONVCONTEXT* PCONVCONTEXT;
    41    213   
    42         -struct tagCONVINFO {
    43         -  DWORD cb;
    44         -  DWORD_PTR hUser;
    45         -  HCONV hConvPartner;
    46         -  HSZ hszSvcPartner;
    47         -  HSZ hszServiceReq;
    48         -  HSZ hszTopic;
    49         -  HSZ hszItem;
    50         -  UINT wFmt;
    51         -  UINT wType;
    52         -  UINT wStatus;
    53         -  UINT wConvst;
    54         -  UINT wLastError;
    55         -  HCONVLIST hConvList;
    56         -  CONVCONTEXT ConvCtxt;
    57         -  HWND hwnd;
    58         -  HWND hwndPartner;
          214  +struct CONVINFO {
          215  + DWORD       cb = CONVINFO.sizeof;
          216  + DWORD       hUser;
          217  + HCONV       hConvPartner;
          218  + HSZ         hszSvcPartner;
          219  + HSZ         hszServiceReq;
          220  + HSZ         hszTopic;
          221  + HSZ         hszItem;
          222  + UINT        wFmt;
          223  + UINT        wType;
          224  + UINT        wStatus;
          225  + UINT        wConvst;
          226  + UINT        wLastError;
          227  + HCONVLIST   hConvList;
          228  + CONVCONTEXT ConvCtxt;
          229  + HWND        hwnd;
          230  + HWND        hwndPartner;
    59    231   }
    60         -alias tagCONVINFO CONVINFO;
    61         -
    62    232   alias CONVINFO* PCONVINFO;
    63    233   
    64         -enum : uint { XST_NULL = 0 }
    65         -enum : uint { XST_INCOMPLETE = 1 }
    66         -enum : uint { XST_CONNECTED = 2 }
    67         -enum : uint { XST_INIT1 = 3 }
    68         -enum : uint { XST_INIT2 = 4 }
    69         -enum : uint { XST_REQSENT = 5 }
    70         -enum : uint { XST_DATARCVD = 6 }
    71         -enum : uint { XST_POKESENT = 7 }
    72         -enum : uint { XST_POKEACKRCVD = 8 }
    73         -enum : uint { XST_EXECSENT = 9 }
    74         -enum : uint { XST_EXECACKRCVD = 10 }
    75         -enum : uint { XST_ADVSENT = 11 }
    76         -enum : uint { XST_UNADVSENT = 12 }
    77         -enum : uint { XST_ADVACKRCVD = 13 }
    78         -enum : uint { XST_UNADVACKRCVD = 14 }
    79         -enum : uint { XST_ADVDATASENT = 15 }
    80         -enum : uint { XST_ADVDATAACKRCVD = 16 }
          234  +struct DDEML_MSG_HOOK_DATA {
          235  + UINT     uiLo;
          236  + UINT     uiHi;
          237  + DWORD    cbData;
          238  + DWORD[8] Data;
          239  +}
          240  +
          241  +struct MONHSZSTRUCT {
          242  + UINT     cb = MONHSZSTRUCT.sizeof;
          243  + int      fsAction;
          244  + DWORD    dwTime;
          245  + HSZ      hsz;
          246  + HANDLE   hTask;
          247  + TCHAR[1] _str;
          248  +
          249  + TCHAR* str() { return _str.ptr; }
          250  +}
          251  +alias MONHSZSTRUCT* PMONHSZSTRUCT;
    81    252   
    82         -enum : uint { CADV_LATEACK = 0xFFFF }
          253  +struct MONLINKSTRUCT {
          254  + UINT   cb = MONLINKSTRUCT.sizeof;
          255  + DWORD  dwTime;
          256  + HANDLE hTask;
          257  + BOOL   fEstablished;
          258  + BOOL   fNoData;
          259  + HSZ    hszSvc;
          260  + HSZ    hszTopic;
          261  + HSZ    hszItem;
          262  + UINT   wFmt;
          263  + BOOL   fServer;
          264  + HCONV  hConvServer;
          265  + HCONV  hConvClient;
          266  +}
          267  +alias MONLINKSTRUCT* PMONLINKSTRUCT;
    83    268   
    84         -enum : uint { ST_CONNECTED = 0x0001 }
    85         -enum : uint { ST_ADVISE = 0x0002 }
    86         -enum : uint { ST_ISLOCAL = 0x0004 }
    87         -enum : uint { ST_BLOCKED = 0x0008 }
    88         -enum : uint { ST_CLIENT = 0x0010 }
    89         -enum : uint { ST_TERMINATED = 0x0020 }
    90         -enum : uint { ST_INLIST = 0x0040 }
    91         -enum : uint { ST_BLOCKNEXT = 0x0080 }
    92         -enum : uint { ST_ISSELF = 0x0100 }
    93         -
    94         -enum : uint { DDE_FACK = 0x8000 }
    95         -enum : uint { DDE_FBUSY = 0x4000 }
    96         -enum : uint { DDE_FDEFERUPD = 0x4000 }
    97         -enum : uint { DDE_FACKREQ = 0x8000 }
    98         -enum : uint { DDE_FRELEASE = 0x2000 }
    99         -enum : uint { DDE_FREQUESTED = 0x1000 }
   100         -enum : uint { DDE_FAPPSTATUS = 0x00ff }
   101         -enum : uint { DDE_FNOTPROCESSED = 0x0000 }
          269  +struct MONCONVSTRUCT {
          270  + UINT   cb = MONCONVSTRUCT.sizeof;
          271  + BOOL   fConnect;
          272  + DWORD  dwTime;
          273  + HANDLE hTask;
          274  + HSZ    hszSvc;
          275  + HSZ    hszTopic;
          276  + HCONV  hConvClient;
          277  + HCONV  hConvServer;
          278  +}
          279  +alias MONCONVSTRUCT* PMONCONVSTRUCT;
   102    280   
   103         -const uint DDE_FACKRESERVED = ~(DDE_FACK | DDE_FBUSY | DDE_FAPPSTATUS);
   104         -const uint DDE_FADVRESERVED = ~(DDE_FACKREQ | DDE_FDEFERUPD);
   105         -const uint DDE_FDATRESERVED = ~(DDE_FACKREQ | DDE_FRELEASE | DDE_FREQUESTED);
   106         -const uint DDE_FPOKRESERVED = ~(DDE_FRELEASE);
   107         -
   108         -enum : uint { MSGF_DDEMGR = 0x8001 }
   109         -
   110         -enum : uint { CP_WINANSI = 1004 }
   111         -enum : uint { CP_WINUNICODE = 1200 }
   112         -// #ifdef UNICODE
   113         -alias CP_WINUNICODE CP_WINNEUTRAL;
   114         -// #else  // !UNICODE
   115         -// #...
   116         -// #endif // !UNICODE
   117         -
   118         -enum : uint { XTYPF_NOBLOCK = 0x0002 }
   119         -enum : uint { XTYPF_NODATA = 0x0004 }
   120         -enum : uint { XTYPF_ACKREQ = 0x0008 }
   121         -
   122         -enum : uint { XCLASS_MASK = 0xFC00 }
   123         -enum : uint { XCLASS_BOOL = 0x1000 }
   124         -enum : uint { XCLASS_DATA = 0x2000 }
   125         -enum : uint { XCLASS_FLAGS = 0x4000 }
   126         -enum : uint { XCLASS_NOTIFICATION = 0x8000 }
          281  +struct MONCBSTRUCT {
          282  + UINT        cb = MONCBSTRUCT.sizeof;
          283  + DWORD       dwTime;
          284  + HANDLE      hTask;
          285  + DWORD       dwRet;
          286  + UINT        wType;
          287  + UINT        wFmt;
          288  + HCONV       hConv;
          289  + HSZ         hsz1;
          290  + HSZ         hsz2;
          291  + HDDEDATA    hData;
          292  + ULONG_PTR   dwData1;
          293  + ULONG_PTR   dwData2;
          294  + CONVCONTEXT cc;
          295  + DWORD       cbData;
          296  + DWORD[8]    Data;
          297  +}
          298  +alias MONCBSTRUCT* PMONCBSTRUCT;
   127    299   
   128         -const uint XTYP_ERROR = 0x0000 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK ;
   129         -const uint XTYP_ADVDATA = 0x0010 | XCLASS_FLAGS ;
   130         -const uint XTYP_ADVREQ = 0x0020 | XCLASS_DATA | XTYPF_NOBLOCK ;
   131         -const uint XTYP_ADVSTART = 0x0030 | XCLASS_BOOL ;
   132         -const uint XTYP_ADVSTOP = 0x0040 | XCLASS_NOTIFICATION;
   133         -const uint XTYP_EXECUTE = 0x0050 | XCLASS_FLAGS ;
   134         -const uint XTYP_CONNECT = 0x0060 | XCLASS_BOOL | XTYPF_NOBLOCK;
   135         -const uint XTYP_CONNECT_CONFIRM = 0x0070 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK;
   136         -const uint XTYP_XACT_COMPLETE = 0x0080 | XCLASS_NOTIFICATION ;
   137         -const uint XTYP_POKE = 0x0090 | XCLASS_FLAGS ;
   138         -const uint XTYP_REGISTER = 0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK;
   139         -const uint XTYP_REQUEST = 0x00B0 | XCLASS_DATA ;
   140         -const uint XTYP_DISCONNECT = 0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK;
   141         -const uint XTYP_UNREGISTER = 0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK;
   142         -const uint XTYP_WILDCONNECT = 0x00E0 | XCLASS_DATA | XTYPF_NOBLOCK;
   143         -
   144         -enum : uint { XTYP_MASK = 0x00F0 }
   145         -enum : uint { XTYP_SHIFT = 4 }
   146         -
   147         -enum : uint { TIMEOUT_ASYNC = 0xFFFFFFFF }
   148         -
   149         -enum : uint { QID_SYNC = 0xFFFFFFFF }
   150         -
   151         -// #ifdef UNICODE
   152         -const wchar[] SZDDESYS_TOPIC = "System";
   153         -const wchar[] SZDDESYS_ITEM_TOPICS = "Topics";
   154         -const wchar[] SZDDESYS_ITEM_SYSITEMS = "SysItems";
   155         -const wchar[] SZDDESYS_ITEM_RTNMSG = "ReturnMessage";
   156         -const wchar[] SZDDESYS_ITEM_STATUS = "Status";
   157         -const wchar[] SZDDESYS_ITEM_FORMATS = "Formats";
   158         -const wchar[] SZDDESYS_ITEM_HELP = "Help";
   159         -const wchar[] SZDDE_ITEM_ITEMLIST = "TopicItemList";
   160         -// #else
   161         -// #...
   162         -// #...
   163         -// #...
   164         -// #...
   165         -// #...
   166         -// #...
   167         -// #...
   168         -// #...
   169         -// #endif
   170         -
   171         -// typedef HDDEDATA CALLBACK FNCALLBACK(UINT wType, UINT wFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, ULONG_PTR dwData1, ULONG_PTR dwData2);
   172         -extern(Windows) alias HDDEDATA function(UINT wType, UINT wFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, ULONG_PTR dwData1, ULONG_PTR dwData2) PFNCALLBACK;
   173         -
   174         -const HDDEDATA CBR_BLOCK = cast(HDDEDATA)-1;
   175         -
   176         -extern(Windows) export UINT DdeInitializeA(   LPDWORD pidInst,  PFNCALLBACK pfnCallback,
   177         -         DWORD afCmd,  DWORD ulRes);
   178         -extern(Windows) export UINT DdeInitializeW(   LPDWORD pidInst,  PFNCALLBACK pfnCallback,
   179         -         DWORD afCmd,  DWORD ulRes);
   180         -// #ifdef UNICODE
   181         -alias DdeInitializeW DdeInitialize;
   182         -// #else
   183         -// #...
   184         -// #endif // !UNICODE
   185         -
   186         -enum : uint { CBF_FAIL_SELFCONNECTIONS = 0x00001000 }
   187         -enum : uint { CBF_FAIL_CONNECTIONS = 0x00002000 }
   188         -enum : uint { CBF_FAIL_ADVISES = 0x00004000 }
   189         -enum : uint { CBF_FAIL_EXECUTES = 0x00008000 }
   190         -enum : uint { CBF_FAIL_POKES = 0x00010000 }
   191         -enum : uint { CBF_FAIL_REQUESTS = 0x00020000 }
   192         -enum : uint { CBF_FAIL_ALLSVRXACTIONS = 0x0003f000 }
   193         -
   194         -enum : uint { CBF_SKIP_CONNECT_CONFIRMS = 0x00040000 }
   195         -enum : uint { CBF_SKIP_REGISTRATIONS = 0x00080000 }
   196         -enum : uint { CBF_SKIP_UNREGISTRATIONS = 0x00100000 }
   197         -enum : uint { CBF_SKIP_DISCONNECTS = 0x00200000 }
   198         -enum : uint { CBF_SKIP_ALLNOTIFICATIONS = 0x003c0000 }
   199         -
   200         -enum : uint { APPCMD_CLIENTONLY = 0x00000010 }
   201         -enum : uint { APPCMD_FILTERINITS = 0x00000020 }
   202         -enum : uint { APPCMD_MASK = 0x00000FF0 }
   203         -
   204         -enum : uint { APPCLASS_STANDARD = 0x00000000 }
   205         -enum : uint { APPCLASS_MASK = 0x0000000F }
          300  +struct MONERRSTRUCT {
          301  + UINT   cb = MONERRSTRUCT.sizeof;
          302  + UINT   wLastError;
          303  + DWORD  dwTime;
          304  + HANDLE hTask;
          305  +}
          306  +alias MONERRSTRUCT* PMONERRSTRUCT;
   206    307   
   207         -extern(Windows) export BOOL DdeUninitialize(  DWORD idInst);
   208         -
   209         -extern(Windows) export HCONVLIST DdeConnectList(  DWORD idInst,  HSZ hszService,  HSZ hszTopic,
   210         -         HCONVLIST hConvList,  PCONVCONTEXT pCC);
   211         -extern(Windows) export HCONV DdeQueryNextServer(  HCONVLIST hConvList,  HCONV hConvPrev);
   212         -extern(Windows) export BOOL DdeDisconnectList(  HCONVLIST hConvList);
   213         -
   214         -extern(Windows) export HCONV DdeConnect(  DWORD idInst,  HSZ hszService,  HSZ hszTopic,
   215         -         PCONVCONTEXT pCC);
   216         -extern(Windows) export BOOL DdeDisconnect(   HCONV hConv);
   217         -extern(Windows) export HCONV DdeReconnect(  HCONV hConv);
   218         -extern(Windows) export UINT DdeQueryConvInfo(  HCONV hConv,  DWORD idTransaction,   PCONVINFO pConvInfo);
   219         -extern(Windows) export BOOL DdeSetUserHandle(  HCONV hConv,  DWORD id,  DWORD_PTR hUser);
   220         -extern(Windows) export BOOL DdeAbandonTransaction(  DWORD idInst,  HCONV hConv,  DWORD idTransaction);
   221         -
   222         -extern(Windows) export BOOL DdePostAdvise(  DWORD idInst,  HSZ hszTopic,  HSZ hszItem);
   223         -extern(Windows) export BOOL DdeEnableCallback(  DWORD idInst,  HCONV hConv,  UINT wCmd);
   224         -extern(Windows) export BOOL DdeImpersonateClient(  HCONV hConv);
   225         -
   226         -enum : uint { EC_ENABLEALL = 0 }
   227         -alias ST_BLOCKNEXT EC_ENABLEONE;
   228         -alias ST_BLOCKED EC_DISABLE;
   229         -enum : uint { EC_QUERYWAITING = 2 }
   230         -
   231         -extern(Windows) export HDDEDATA DdeNameService(  DWORD idInst,  HSZ hsz1,  HSZ hsz2,  UINT afCmd);
   232         -
   233         -enum : uint { DNS_REGISTER = 0x0001 }
   234         -enum : uint { DNS_UNREGISTER = 0x0002 }
   235         -enum : uint { DNS_FILTERON = 0x0004 }
   236         -enum : uint { DNS_FILTEROFF = 0x0008 }
   237         -
   238         -extern(Windows) export HDDEDATA DdeClientTransaction(  LPBYTE pData,  DWORD cbData,
   239         -         HCONV hConv,  HSZ hszItem,  UINT wFmt,  UINT wType,
   240         -         DWORD dwTimeout,  LPDWORD pdwResult);
   241         -
   242         -extern(Windows) export HDDEDATA DdeCreateDataHandle(  DWORD idInst,  LPBYTE pSrc,  DWORD cb,
   243         -         DWORD cbOff,  HSZ hszItem,  UINT wFmt,  UINT afCmd);
   244         -extern(Windows) export HDDEDATA DdeAddData(  HDDEDATA hData,  LPBYTE pSrc,  DWORD cb,  DWORD cbOff);
   245         -extern(Windows) export DWORD DdeGetData(  HDDEDATA hData,  LPBYTE pDst,  DWORD cbMax,  DWORD cbOff);
   246         -extern(Windows) export LPBYTE DdeAccessData(  HDDEDATA hData,  LPDWORD pcbDataSize);
   247         -extern(Windows) export BOOL DdeUnaccessData(  HDDEDATA hData);
   248         -extern(Windows) export BOOL DdeFreeDataHandle(   HDDEDATA hData);
   249         -
   250         -enum : uint { HDATA_APPOWNED = 0x0001 }
   251         -
   252         -extern(Windows) export UINT DdeGetLastError(  DWORD idInst);
   253         -
   254         -enum : uint { DMLERR_NO_ERROR = 0 }
   255         -
   256         -enum : uint { DMLERR_FIRST = 0x4000 }
   257         -
   258         -enum : uint { DMLERR_ADVACKTIMEOUT = 0x4000 }
   259         -enum : uint { DMLERR_BUSY = 0x4001 }
   260         -enum : uint { DMLERR_DATAACKTIMEOUT = 0x4002 }
   261         -enum : uint { DMLERR_DLL_NOT_INITIALIZED = 0x4003 }
   262         -enum : uint { DMLERR_DLL_USAGE = 0x4004 }
   263         -enum : uint { DMLERR_EXECACKTIMEOUT = 0x4005 }
   264         -enum : uint { DMLERR_INVALIDPARAMETER = 0x4006 }
   265         -enum : uint { DMLERR_LOW_MEMORY = 0x4007 }
   266         -enum : uint { DMLERR_MEMORY_ERROR = 0x4008 }
   267         -enum : uint { DMLERR_NOTPROCESSED = 0x4009 }
   268         -enum : uint { DMLERR_NO_CONV_ESTABLISHED = 0x400a }
   269         -enum : uint { DMLERR_POKEACKTIMEOUT = 0x400b }
   270         -enum : uint { DMLERR_POSTMSG_FAILED = 0x400c }
   271         -enum : uint { DMLERR_REENTRANCY = 0x400d }
   272         -enum : uint { DMLERR_SERVER_DIED = 0x400e }
   273         -enum : uint { DMLERR_SYS_ERROR = 0x400f }
   274         -enum : uint { DMLERR_UNADVACKTIMEOUT = 0x4010 }
   275         -enum : uint { DMLERR_UNFOUND_QUEUE_ID = 0x4011 }
   276         -
   277         -enum : uint { DMLERR_LAST = 0x4011 }
          308  +struct MONMSGSTRUCT {
          309  + UINT   cb = MONMSGSTRUCT.sizeof;
          310  + HWND   hwndTo;
          311  + DWORD  dwTime;
          312  + HANDLE hTask;
          313  + UINT   wMsg;
          314  + WPARAM wParam;
          315  + LPARAM lParam;
          316  + DDEML_MSG_HOOK_DATA dmhd;
          317  +}
          318  +alias MONMSGSTRUCT* PMONMSGSTRUCT;
   278    319   
   279         -extern(Windows) export HSZ DdeCreateStringHandleA(  DWORD idInst,  LPCSTR psz,  int iCodePage);
   280         -extern(Windows) export HSZ DdeCreateStringHandleW(  DWORD idInst,  LPCWSTR psz,  int iCodePage);
   281         -// #ifdef UNICODE
   282         -alias DdeCreateStringHandleW DdeCreateStringHandle;
   283         -// #else
   284         -// #...
   285         -// #endif // !UNICODE
   286         -extern(Windows) export DWORD DdeQueryStringA(  DWORD idInst,  HSZ hsz,   LPSTR psz,  DWORD cchMax,  int iCodePage);
   287         -extern(Windows) export DWORD DdeQueryStringW(  DWORD idInst,  HSZ hsz,   LPWSTR psz,  DWORD cchMax,  int iCodePage);
   288         -// #ifdef UNICODE
   289         -alias DdeQueryStringW DdeQueryString;
   290         -// #else
   291         -// #...
   292         -// #endif // !UNICODE
   293         -extern(Windows) export BOOL DdeFreeStringHandle(  DWORD idInst,   HSZ hsz);
   294         -extern(Windows) export BOOL DdeKeepStringHandle(  DWORD idInst,   HSZ hsz);
   295         -extern(Windows) export int DdeCmpStringHandles(  HSZ hsz1,  HSZ hsz2);
   296         -
   297         -// #ifndef NODDEMLSPY
   298         -
   299         -struct tagDDEML_MSG_HOOK_DATA {
   300         -  UINT_PTR uiLo;
   301         -  UINT_PTR uiHi;
   302         -  DWORD cbData;
   303         -  DWORD Data[8];
          320  +extern (Windows) {
          321  + BOOL DdeAbandonTransaction(DWORD, HCONV, DWORD);
          322  + PBYTE DdeAccessData(HDDEDATA, PDWORD);
          323  + HDDEDATA DdeAddData(HDDEDATA, PBYTE, DWORD, DWORD);
          324  + HDDEDATA DdeClientTransaction(PBYTE, DWORD, HCONV, HSZ, UINT, UINT,
          325  +   DWORD, PDWORD);
          326  + int DdeCmpStringHandles(HSZ, HSZ);
          327  + HCONV DdeConnect(DWORD, HSZ, HSZ, PCONVCONTEXT);
          328  + HCONVLIST DdeConnectList(DWORD, HSZ, HSZ, HCONVLIST, PCONVCONTEXT);
          329  + HDDEDATA DdeCreateDataHandle(DWORD, PBYTE, DWORD, DWORD, HSZ, UINT,
          330  +   UINT);
          331  + HSZ DdeCreateStringHandleA(DWORD, LPSTR, int);
          332  + HSZ DdeCreateStringHandleW(DWORD, LPWSTR, int);
          333  + BOOL DdeDisconnect(HCONV);
          334  + BOOL DdeDisconnectList(HCONVLIST);
          335  + BOOL DdeEnableCallback(DWORD, HCONV, UINT);
          336  + BOOL DdeFreeDataHandle(HDDEDATA);
          337  + BOOL DdeFreeStringHandle(DWORD, HSZ);
          338  + DWORD DdeGetData(HDDEDATA, PBYTE, DWORD, DWORD);
          339  + UINT DdeGetLastError(DWORD);
          340  + BOOL DdeImpersonateClient(HCONV);
          341  + UINT DdeInitializeA(PDWORD, PFNCALLBACK, DWORD, DWORD);
          342  + UINT DdeInitializeW(PDWORD, PFNCALLBACK, DWORD, DWORD);
          343  + BOOL DdeKeepStringHandle(DWORD, HSZ);
          344  + HDDEDATA DdeNameService(DWORD, HSZ, HSZ, UINT);
          345  + BOOL DdePostAdvise(DWORD, HSZ, HSZ);
          346  + UINT DdeQueryConvInfo(HCONV, DWORD, PCONVINFO);
          347  + HCONV DdeQueryNextServer(HCONVLIST, HCONV);
          348  + DWORD DdeQueryStringA(DWORD, HSZ, LPSTR, DWORD, int);
          349  + DWORD DdeQueryStringW(DWORD, HSZ, LPWSTR, DWORD, int);
          350  + HCONV DdeReconnect(HCONV);
          351  + BOOL DdeSetUserHandle(HCONV, DWORD, DWORD);
          352  + BOOL DdeUnaccessData(HDDEDATA);
          353  + BOOL DdeUninitialize(DWORD);
   304    354   }
   305         -alias tagDDEML_MSG_HOOK_DATA DDEML_MSG_HOOK_DATA;
   306         -alias tagDDEML_MSG_HOOK_DATA* PDDEML_MSG_HOOK_DATA;
   307    355   
   308         -struct tagMONMSGSTRUCT {
   309         -  UINT cb;
   310         -  HWND hwndTo;
   311         -  DWORD dwTime;
   312         -  HANDLE hTask;
   313         -  UINT wMsg;
   314         -  WPARAM wParam;
   315         -  LPARAM lParam;
   316         -  DDEML_MSG_HOOK_DATA dmhd;
   317         -}
   318         -alias tagMONMSGSTRUCT MONMSGSTRUCT;
   319         -alias tagMONMSGSTRUCT* PMONMSGSTRUCT;
          356  +const TCHAR[]
          357  + SZDDESYS_TOPIC         = "System",
          358  + SZDDESYS_ITEM_TOPICS   = "Topics",
          359  + SZDDESYS_ITEM_SYSITEMS = "SysItems",
          360  + SZDDESYS_ITEM_RTNMSG   = "ReturnMessage",
          361  + SZDDESYS_ITEM_STATUS   = "Status",
          362  + SZDDESYS_ITEM_FORMATS  = "Formats",
          363  + SZDDESYS_ITEM_HELP     = "Help",
          364  + SZDDE_ITEM_ITEMLIST    = "TopicItemList";
   320    365   
   321         -struct tagMONCBSTRUCT {
   322         -  UINT cb;
   323         -  DWORD dwTime;
   324         -  HANDLE hTask;
   325         -  DWORD dwRet;
   326         -  UINT wType;
   327         -  UINT wFmt;
   328         -  HCONV hConv;
   329         -  HSZ hsz1;
   330         -  HSZ hsz2;
   331         -  HDDEDATA hData;
   332         -  ULONG_PTR dwData1;
   333         -  ULONG_PTR dwData2;
   334         -  CONVCONTEXT cc;
   335         -  DWORD cbData;
   336         -  DWORD Data[8];
   337         -}
   338         -alias tagMONCBSTRUCT MONCBSTRUCT;
   339         -alias tagMONCBSTRUCT* PMONCBSTRUCT;
   340         -
   341         -struct tagMONHSZSTRUCTA {
   342         -  UINT cb;
   343         -  BOOL fsAction;
   344         -  DWORD dwTime;
   345         -  HSZ hsz;
   346         -  HANDLE hTask;
   347         -  CHAR str[1];
   348         -}
   349         -alias tagMONHSZSTRUCTA MONHSZSTRUCTA;
   350         -alias tagMONHSZSTRUCTA* PMONHSZSTRUCTA;
   351         -
   352         -struct tagMONHSZSTRUCTW {
   353         -  UINT cb;
   354         -  BOOL fsAction;
   355         -  DWORD dwTime;
   356         -  HSZ hsz;
   357         -  HANDLE hTask;
   358         -  WCHAR str[1];
   359         -}
   360         -alias tagMONHSZSTRUCTW MONHSZSTRUCTW;
   361         -alias tagMONHSZSTRUCTW* PMONHSZSTRUCTW;
   362         -
   363         -// #ifdef UNICODE
   364         -alias MONHSZSTRUCTW MONHSZSTRUCT;
   365         -alias PMONHSZSTRUCTW PMONHSZSTRUCT;
   366         -// #else
   367         -// ...
   368         -// #endif // UNICODE
   369         -
   370         -enum : uint { MH_CREATE = 1 }
   371         -enum : uint { MH_KEEP = 2 }
   372         -enum : uint { MH_DELETE = 3 }
   373         -enum : uint { MH_CLEANUP = 4 }
   374         -
   375         -struct tagMONERRSTRUCT {
   376         -  UINT cb;
   377         -  UINT wLastError;
   378         -  DWORD dwTime;
   379         -  HANDLE hTask;
   380         -}
   381         -alias tagMONERRSTRUCT MONERRSTRUCT;
   382         -alias tagMONERRSTRUCT* PMONERRSTRUCT;
   383         -
   384         -struct tagMONLINKSTRUCT {
   385         -  UINT cb;
   386         -  DWORD dwTime;
   387         -  HANDLE hTask;
   388         -  BOOL fEstablished;
   389         -  BOOL fNoData;
   390         -  HSZ hszSvc;
   391         -  HSZ hszTopic;
   392         -  HSZ hszItem;
   393         -  UINT wFmt;
   394         -  BOOL fServer;
   395         -  HCONV hConvServer;
   396         -  HCONV hConvClient;
   397         -}
   398         -alias tagMONLINKSTRUCT MONLINKSTRUCT;
   399         -alias tagMONLINKSTRUCT* PMONLINKSTRUCT;
   400         -
   401         -struct tagMONCONVSTRUCT {
   402         -  UINT cb;
   403         -  BOOL fConnect;
   404         -  DWORD dwTime;
   405         -  HANDLE hTask;
   406         -  HSZ hszSvc;
   407         -  HSZ hszTopic;
   408         -  HCONV hConvClient;
   409         -  HCONV hConvServer;
   410         -}
   411         -alias tagMONCONVSTRUCT MONCONVSTRUCT;
   412         -alias tagMONCONVSTRUCT* PMONCONVSTRUCT;
   413         -
   414         -enum : uint { MAX_MONITORS = 4 }
   415         -enum : uint { APPCLASS_MONITOR = 0x00000001 }
   416         -const uint XTYP_MONITOR = 0x00F0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK;
   417         -
   418         -enum : uint { MF_HSZ_INFO = 0x01000000 }
   419         -enum : uint { MF_SENDMSGS = 0x02000000 }
   420         -enum : uint { MF_POSTMSGS = 0x04000000 }
   421         -enum : uint { MF_CALLBACKS = 0x08000000 }
   422         -enum : uint { MF_ERRORS = 0x10000000 }
   423         -enum : uint { MF_LINKS = 0x20000000 }
   424         -enum : uint { MF_CONV = 0x40000000 }
   425         -
   426         -enum : uint { MF_MASK = 0xFF000000 }
   427         -// #endif /* NODDEMLSPY */
   428         -
   429         -// #ifdef __cplusplus
   430         -// }
   431         -// #endif  /* __cplusplus */
   432         -
   433         -// #endif /* _INC_DDEMLH */
   434         -
          366  +version (Unicode) {
          367  + alias DdeCreateStringHandleW DdeCreateStringHandle;
          368  + alias DdeInitializeW DdeInitialize;
          369  + alias DdeQueryStringW DdeQueryString;
          370  +} else {
          371  + alias DdeCreateStringHandleA DdeCreateStringHandle;
          372  + alias DdeInitializeA DdeInitialize;
          373  + alias DdeQueryStringA DdeQueryString;
          374  +}