home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / cb / setup / cbuilder / data.z / DDEML.PAS < prev    next >
Pascal/Delphi Source File  |  1997-02-28  |  17KB  |  511 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Runtime Library                          }
  5. {       Windows 32bit API Interface Unit                }
  6. {                                                       }
  7. {       Copyright (c) 1992-1997 Borland International   }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit Ddeml;        // $Revision:   1.2  $
  12.  
  13. interface
  14.  
  15. uses Windows;
  16.  
  17. type
  18.   HConvList = Longint;
  19.   HConv = Longint;
  20.   HSz = Longint;
  21.   HDDEData = Longint;
  22.  
  23. type
  24.   { the following structure is for use with xtyp_WildConnect processing. }
  25.   PHSZPair = ^THSZPair;
  26.   tagHSZPAIR = record
  27.     hszSvc: HSZ;
  28.     hszTopic: HSZ;
  29.   end;
  30.   {$nonamespace tagHSZPAIR}
  31.   THSZPair = tagHSZPAIR;
  32.  
  33.   { The following structure is used by DdeConnect() and DdeConnectList()
  34.     and by xtyp_Connect and xtyp_WildConnect callbacks. }
  35.  
  36.   PConvContext = ^TConvContext;
  37.   tagCONVCONTEXT = record
  38.     cb: UINT;            { set to sizeof(ConvCOnTEXT) }
  39.     wFlags: UINT;        { none currently defined. }
  40.     wCountryID: UINT;    { country code for topic/item strings used. }
  41.     iCodePage: Integer;  { codepage used for topic/item strings. }
  42.     dwLangID: DWORD;     { language ID for topic/item strings. }
  43.     dwSecurity: DWORD;   { Private security code. }
  44.     qos: TSecurityQualityOfService;  { used to support client impersonation }
  45.   end;
  46.   {$nonamespace tagCONVCONTEXT}
  47.   TConvContext = tagCONVCONTEXT;
  48.  
  49. { The following structure is used by DdeQueryConvInfo(): }
  50.  
  51.   PConvInfo = ^TConvInfo;
  52.   tagCONVINFO = record
  53.     cb: DWORD;            { sizeof(CONVINFO)  }
  54.     hUser: DWORD;         { user specified field  }
  55.     hConvPartner: HConv;    { hConv on other end or 0 if non-ddemgr partner  }
  56.     hszSvcPartner: HSz;     { app name of partner if obtainable  }
  57.     hszServiceReq: HSz;     { AppName requested for connection  }
  58.     hszTopic: HSz;          { Topic name for conversation  }
  59.     hszItem: HSz;           { transaction item name or NULL if quiescent  }
  60.     wFmt: UINT;             { transaction format or NULL if quiescent  }
  61.     wType: UINT;            { XTYP_ for current transaction  }
  62.     wStatus: UINT;          { ST_ constant for current conversation  }
  63.     wConvst: UINT;          { XST_ constant for current transaction  }
  64.     wLastError: UINT;       { last transaction error.  }
  65.     hConvList: HConvList;   { parent hConvList if this conversation is in a list }
  66.     ConvCtxt: TConvContext; { conversation context }
  67.     hwnd: HWND;             { window handle for this conversation }
  68.     hwndPartner: HWND;      { partner window handle for this conversation }
  69.   end;
  70.   {$nonamespace tagCONVINFO}
  71.   TConvInfo = tagCONVINFO;
  72.  
  73. const
  74.   { conversation states (usState) }
  75.  
  76.   XST_NULL = 0;                 { quiescent states }
  77.   XST_INCOMPLETE = 1;
  78.   XST_CONNECTED = 2;
  79.   XST_INIT1 = 3;                { mid-initiation states }
  80.   XST_INIT2 = 4;
  81.   XST_REQSENT = 5;              { active conversation states }
  82.   XST_DATARCVD = 6;
  83.   XST_POKESENT = 7;
  84.   XST_POKEACKRCVD = 8;
  85.   XST_EXECSENT = 9;
  86.   XST_EXECACKRCVD = 10;
  87.   XST_ADVSENT = 11;
  88.   XST_UNADVSENT = 12;
  89.   XST_ADVACKRCVD = 13;
  90.   XST_UNADVACKRCVD = 14;
  91.   XST_ADVDATASENT = 15;
  92.   XST_ADVDATAACKRCVD = 16;
  93.  
  94.   { used in LOWORD(dwData1) of XTYP_ADVREQ callbacks... }
  95.  
  96.   CADV_LATEACK = $FFFF;
  97.  
  98.   { conversation status bits (fsStatus) }
  99.  
  100.   ST_CONNECTED = $0001;
  101.   ST_ADVISE = $0002;
  102.   ST_ISLOCAL = $0004;
  103.   ST_BLOCKED = $0008;
  104.   ST_CLIENT = $0010;
  105.   ST_TERMINATED = $0020;
  106.   ST_INLIST = $0040;
  107.   ST_BLOCKNEXT = $0080;
  108.   ST_ISSELF = $0100;
  109.  
  110.   { DDE constants for wStatus field }
  111.  
  112.   DDE_FACK = $8000;
  113.   DDE_FBUSY = $4000;
  114.   DDE_FDEFERUPD = $4000;
  115.   DDE_FACKREQ = $8000;
  116.   DDE_FRELEASE = $2000;
  117.   DDE_FREQUESTED = $1000;
  118.   DDE_FAPPSTATUS = $00ff;
  119.   DDE_FNOTPROCESSED = $0000;
  120.  
  121.   DDE_FACKRESERVED = $3ff0;
  122.   DDE_FADVRESERVED = $3fff;
  123.   DDE_FDATRESERVED = $4fff;
  124.   DDE_FPOKRESERVED = $dfff;
  125.  
  126.   { message filter hook types }
  127.  
  128.   MSGF_DDEMGR = $8001;
  129.  
  130.   { default codepage for windows & old DDE convs. }
  131.  
  132.   CP_WINANSI = 1004;
  133.   CP_WINUNICOCDE = 1200;
  134.  
  135.   { transaction types }
  136.  
  137.   XTYPF_NOBLOCK = $0002; { CBR_BLOCK will not work }
  138.   XTYPF_NODATA = $0004;  { DDE_FDEFERUPD }
  139.   XTYPF_ACKREQ = $0008;  { DDE_FACKREQ }
  140.  
  141.   XCLASS_MASK = $FC00;
  142.   XCLASS_BOOL = $1000;
  143.   XCLASS_DATA = $2000;
  144.   XCLASS_FLAGS = $4000;
  145.   XCLASS_NOTIFICATION = $8000;
  146.  
  147.   XTYP_ERROR = $0000 or XCLASS_NOTIFICATION or XTYPF_NOBLOCK;
  148.   XTYP_ADVDATA = $0010 or XCLASS_FLAGS;
  149.   XTYP_ADVREQ = $0020 or XCLASS_DATA or XTYPF_NOBLOCK;
  150.   XTYP_ADVSTART = $0030 or XCLASS_BOOL;
  151.   XTYP_ADVSTOP = $0040 or XCLASS_NOTIFICATION;
  152.   XTYP_EXECUTE = $0050 or XCLASS_FLAGS;
  153.   XTYP_CONNECT = $0060 or XCLASS_BOOL or XTYPF_NOBLOCK;
  154.   XTYP_CONNECT_CONFIRM = $0070 or XCLASS_NOTIFICATION or XTYPF_NOBLOCK;
  155.   XTYP_XACT_COMPLETE = $0080 or XCLASS_NOTIFICATION;
  156.   XTYP_POKE = $0090 or XCLASS_FLAGS;
  157.   XTYP_REGISTER = $00A0 or XCLASS_NOTIFICATION or XTYPF_NOBLOCK;
  158.   XTYP_REQUEST = $00B0 or XCLASS_DATA;
  159.   XTYP_DISCONNECT = $00C0 or XCLASS_NOTIFICATION or XTYPF_NOBLOCK;
  160.   XTYP_UNREGISTER = $00D0 or XCLASS_NOTIFICATION or XTYPF_NOBLOCK;
  161.   XTYP_WILDCONNECT = $00E0 or XCLASS_DATA or XTYPF_NOBLOCK;
  162.  
  163.   XTYP_MASK = $00F0;
  164.   XTYP_SHIFT = 4;  { shift to turn xtyp_ into an index }
  165.  
  166.   { Timeout constants }
  167.  
  168.   TIMEOUT_ASYNC =           -1;
  169.  
  170.   { Transaction ID constatnts }
  171.   QID_SYNC =                -1;
  172.  
  173.   { public strings used in DDE }
  174.  
  175.   SZDDESYS_TOPIC = 'System';
  176.   SZDDESYS_ITEM_TOPICS = 'Topics';
  177.   SZDDESYS_ITEM_SYSITEMS = 'SysItems';
  178.   SZDDESYS_ITEM_RTNMSG = 'ReturnMessage';
  179.   SZDDESYS_ITEM_STATUS = 'Status';
  180.   SZDDESYS_ITEM_FORMATS = 'Formats';
  181.   SZDDESYS_ITEM_HELP = 'Help';
  182.   SZDDE_ITEM_ITEMLIST = 'TopicItemList';
  183.  
  184. type
  185.   { API entry points }
  186.   TFNCallback = function (CallType, Fmt: UINT; Conv: HConv; hsz1, hsz2: HSZ;
  187.     Data: HDDEData; Data1, Data2: DWORD): HDDEData stdcall;
  188.  
  189. const
  190.   CBR_BLOCK = $FFFFFFFF;
  191.  
  192. { DLL registration functions }
  193.  
  194. function DdeInitializeA(var Inst: Longint; Callback: TFNCallback;
  195.   Cmd, Res: Longint): Longint; stdcall;
  196. function DdeInitializeW(var Inst: Longint; Callback: TFNCallback;
  197.   Cmd, Res: Longint): Longint; stdcall;
  198. function DdeInitialize(var Inst: Longint; Callback: TFNCallback;
  199.   Cmd, Res: Longint): Longint; stdcall;
  200.  
  201. const
  202.   { Callback filter flags for use with standard apps. }
  203.  
  204.   CBF_FAIL_SELFCONNECTIONS = $00001000;
  205.   CBF_FAIL_CONNECTIONS = $00002000;
  206.   CBF_FAIL_ADVISES = $00004000;
  207.   CBF_FAIL_EXECUTES = $00008000;
  208.   CBF_FAIL_POKES = $00010000;
  209.   CBF_FAIL_REQUESTS = $00020000;
  210.   CBF_FAIL_ALLSVRXACTIONS = $0003f000;
  211.  
  212.   CBF_SKIP_CONNECT_CONFIRMS = $00040000;
  213.   CBF_SKIP_REGISTRATIONS = $00080000;
  214.   CBF_SKIP_UNREGISTRATIONS = $00100000;
  215.   CBF_SKIP_DISCONNECTS = $00200000;
  216.   CBF_SKIP_ALLNOTIFICATIONS = $003c0000;
  217.  
  218.   { Application command flags }
  219.  
  220.   APPCMD_CLIENTONLY = $00000010;
  221.   APPCMD_FILTERINITS = $00000020;
  222.   APPCMD_MASK = $00000FF0;
  223.  
  224.   { Application classification flags }
  225.  
  226.   APPCLASS_STANDARD = $00000000;
  227.   APPCLASS_MASK = $0000000F;
  228.  
  229. function DdeUninitialize(Inst: DWORD): BOOL; stdcall;
  230.  
  231. { conversation enumeration functions }
  232.  
  233. function DdeConnectList(Inst: DWORD; Service, Topic: HSZ;
  234.   ConvList: HConvList; CC: PConvContext): HConvList; stdcall;
  235. function DdeQueryNextServer(ConvList: HConvList; ConvPrev: HConv): HConv; stdcall;
  236. function DdeDisconnectList(ConvList: HConvList): BOOL; stdcall;
  237.  
  238. { conversation control functions }
  239.  
  240. function DdeConnect(Inst: DWORD; Service, Topic: HSZ;
  241.   CC: PConvContext): HConv; stdcall;
  242. function DdeDisconnect(Conv: HConv): BOOL; stdcall;
  243. function DdeReconnect(Conv: HConv): HConv; stdcall;
  244.  
  245. function DdeQueryConvInfo(Conv: HConv; Transaction: DWORD;
  246.  ConvInfo: PConvInfo): UINT; stdcall;
  247. function DdeSetUserHandle(Conv: HConv; ID, User: DWORD): BOOL; stdcall;
  248.  
  249. function DdeAbandonTransaction(Inst: DWORD; Conv: HConv;
  250.   Transaction: DWORD): BOOL; stdcall;
  251.  
  252. { app server interface functions }
  253.  
  254. function DdePostAdvise(Inst: DWORD; Topic, Item: HSZ): BOOL; stdcall;
  255. function DdeEnableCallback(Inst: DWORD; Conv: HConv; Cmd: UINT): BOOL; stdcall;
  256.  
  257. const
  258.   EC_ENABLEALL = 0;
  259.   EC_ENABLEONE = ST_BLOCKNEXT;
  260.   EC_DISABLE = ST_BLOCKED;
  261.   EC_QUERYWAITING = 2;
  262.  
  263. function DdeNameService(Inst: DWORD; hsz1, hsz2: HSZ; Cmd: UINT): HDDEData; stdcall;
  264.  
  265. const
  266.   DNS_REGISTER = $0001;
  267.   DNS_UNREGISTER = $0002;
  268.   DNS_FILTERON = $0004;
  269.   DNS_FILTEROFF = $0008;
  270.  
  271. { app client interface functions }
  272.  
  273. function DdeClientTransaction(Data: Pointer; DataLen: DWORD;
  274.   Conv: HConv; Item: HSZ; Fmt, DataType: UINT; Timeout: DWORD;
  275.   Result: PDWORD): HDDEData; stdcall;
  276.  
  277. { data transfer functions }
  278.  
  279. function DdeCreateDataHandle(Inst: DWORD; Src: Pointer;
  280.   cb, Off: DWORD; Item: HSZ; Fmt, Cmd: UINT): HDDEData; stdcall;
  281.  
  282. function DdeAddData(Data: HDDEData; Src: Pointer;
  283.   cb, Off: DWORD): HDDEData; stdcall;
  284. function DdeGetData(Data: HDDEData; Dst: Pointer;
  285.   Max, Off: DWORD): DWORD; stdcall;
  286. function DdeAccessData(Data: HDDEData; DataSize: PDWORD): Pointer; stdcall;
  287. function DdeUnaccessData(Data: HDDEData): BOOL; stdcall;
  288. function DdeFreeDataHandle(Data: HDDEData): BOOL; stdcall;
  289.  
  290. const
  291.   HDATA_APPOWNED = $0001;
  292.  
  293. function DdeGetLastError(Inst: DWORD): UINT; stdcall;
  294.  
  295. const
  296.   { error codes }
  297.  
  298.   DMLERR_NO_ERROR = 0;       { must be 0 }
  299.  
  300.   DMLERR_FIRST = $4000;
  301.  
  302.   DMLERR_ADVACKTIMEOUT = $4000;
  303.   DMLERR_BUSY = $4001;
  304.   DMLERR_DATAACKTIMEOUT = $4002;
  305.   DMLERR_DLL_NOT_INITIALIZED = $4003;
  306.   DMLERR_DLL_USAGE = $4004;
  307.   DMLERR_EXECACKTIMEOUT = $4005;
  308.   DMLERR_INVALIDPARAMETER = $4006;
  309.   DMLERR_LOW_MEMORY = $4007;
  310.   DMLERR_MEMORY_ERROR = $4008;
  311.   DMLERR_NOTPROCESSED = $4009;
  312.   DMLERR_NO_CONV_ESTABLISHED = $400a;
  313.   DMLERR_POKEACKTIMEOUT = $400b;
  314.   DMLERR_POSTMSG_FAILED = $400c;
  315.   DMLERR_REENTRANCY = $400D;
  316.   DMLERR_SERVER_DIED = $400E;
  317.   DMLERR_SYS_ERROR = $400F;
  318.   DMLERR_UNADVACKTIMEOUT = $4010;
  319.   DMLERR_UNFOUND_QUEUE_ID = $4011;
  320.  
  321.   DMLERR_LAST = $4011;
  322.  
  323. function DdeCreateStringHandleA(Inst: DWORD; psz: PAnsiChar;
  324.   CodePage: Integer): HSZ; stdcall;
  325. function DdeCreateStringHandleW(Inst: DWORD; psz: PWideChar;
  326.   CodePage: Integer): HSZ; stdcall;
  327. function DdeCreateStringHandle(Inst: DWORD; psz: PChar;
  328.   CodePage: Integer): HSZ; stdcall;
  329. function DdeQueryStringA(Inst: DWORD; HSZ: HSZ; psz: PAnsiChar;
  330.   Max: DWORD; CodePage: Integer): DWORD; stdcall;
  331. function DdeQueryStringW(Inst: DWORD; HSZ: HSZ; psz: PWideChar;
  332.   Max: DWORD; CodePage: Integer): DWORD; stdcall;
  333. function DdeQueryString(Inst: DWORD; HSZ: HSZ; psz: PChar;
  334.   Max: DWORD; CodePage: Integer): DWORD; stdcall;
  335. function DdeFreeStringHandle(Inst: DWORD; HSZ: HSZ): BOOL; stdcall;
  336. function DdeKeepStringHandle(Inst: DWORD; HSZ: HSZ): BOOL; stdcall;
  337. function DdeCmpStringHandles(hsz1, hsz2: HSZ): Integer; stdcall;
  338.  
  339. type
  340.   { DDEML public debugging header file info }
  341.  
  342.   tagDDEML_MSG_HOOK_DATA = packed record  { new for NT }
  343.     uiLo: UINT;      { unpacked lo and hi parts of lParam }
  344.     uiHi: UINT;
  345.     cbData: DWORD;   { amount of data in message, if any. May be > than 32 bytes. }
  346.     Data: array [0..7] of DWORD; { data peeking by DDESPY is limited to 32 bytes. }
  347.   end;
  348.   {$nonamespace tagDDEML_MSG_HOOK_DATA}
  349.   TDdemlMsgHookData = tagDDEML_MSG_HOOK_DATA;
  350.  
  351.   tagMONMSGSTRUCT = packed record
  352.     cb: UINT;
  353.     hWndTo: HWND;
  354.     dwTime: DWORD;
  355.     hTask: THandle;
  356.     wMsg: UINT;
  357.     wParam: WPARAM;
  358.     lParam: LPARAM;
  359.     dmhd: TDdemlMsgHookData;
  360.   end;
  361.   {$nonamespace tagMONMSGSTRUCT}
  362.   TMonMsgStruct = tagMONMSGSTRUCT;
  363.  
  364.   tagMONCBSTRUCT = packed record
  365.     cb: UINT;
  366.     dwTime: DWORD;
  367.     hTask: THandle;
  368.     dwRet: DWORD;
  369.     wType: UINT;
  370.     wFmt: UINT;
  371.     hConv: HConv;
  372.     hsz1: HSZ;
  373.     hsz2: HSZ;
  374.     hData: HDDEData;
  375.     dwData1: DWORD;
  376.     dwData2: DWORD;
  377.     cc: TConvContext;  { new for NT for XTYP_CONNECT callbacks }
  378.     cbData: DWORD;     { new for NT for data peeking }
  379.     Data: array [0..7] of DWORD; { new for NT for data peeking }
  380.   end;
  381.   {$nonamespace tagMONCBSTRUCT}
  382.   TMonCBStruct = tagMONCBSTRUCT;
  383.  
  384.   tagMONHSZSTRUCTA = record
  385.     cb: UINT;
  386.     fsAction: BOOL;    { mh_ value }
  387.     dwTime: DWORD;
  388.     HSZ: HSZ;
  389.     hTask: THandle;
  390.     Str: array[0..0] of AnsiChar;
  391.   end;
  392.   {$nonamespace tagMONHSZSTRUCTA}
  393.   TMonHSZStructA = tagMONHSZSTRUCTA;
  394.   tagMONHSZSTRUCTW = record
  395.     cb: UINT;
  396.     fsAction: BOOL;    { mh_ value }
  397.     dwTime: DWORD;
  398.     HSZ: HSZ;
  399.     hTask: THandle;
  400.     Str: array[0..0] of WideChar;
  401.   end;
  402.   {$nonamespace tagMONHSZSTRUCTW}
  403.   TMonHSZStructW = tagMONHSZSTRUCTW;
  404.   TMonHSZStruct = TMonHSZStructA;
  405.  
  406. const
  407.   MH_CREATE = 1;
  408.   MH_KEEP = 2;
  409.   MH_DELETE = 3;
  410.   MH_CLEANUP = 4;
  411.  
  412. type
  413.   PMonErrStruct = ^TMonErrStruct;
  414.   tagMONERRSTRUCT = packed record
  415.     cb: UINT;
  416.     wLastError: UINT;
  417.     dwTime: DWORD;
  418.     hTask: THandle;
  419.   end;
  420.   {$nonamespace tagMONERRSTRUCT}
  421.   TMonErrStruct = tagMONERRSTRUCT;
  422.  
  423.   PMonLinkStruct = ^TMonLinkStruct;
  424.   tagMONLINKSTRUCT = packed record
  425.     cb: UINT;
  426.     dwTime: DWORD;
  427.     hTask: THandle;
  428.     fEstablished: BOOL;
  429.     fNoData: BOOL;
  430.     hszSvc: HSz;
  431.     hszTopic: HSz;
  432.     hszItem: HSz;
  433.     wFmt: UINT;
  434.     fServer: BOOL;
  435.     hConvServer: HConv;
  436.     hConvClient: HConv;
  437.   end;
  438.   {$nonamespace tagMONLINKSTRUCT}
  439.   TMonLinkStruct = tagMONLINKSTRUCT;
  440.  
  441.   PMonConvStruct = ^TMonConvStruct;
  442.   tagMONCONVSTRUCT = packed record
  443.     cb: UINT;
  444.     fConnect: BOOL;
  445.     dwTime: DWORD;
  446.     hTask: THandle;
  447.     hszSvc: HSz;
  448.     hszTopic: HSz;
  449.     hConvClient: HConv;
  450.     hConvServer: HConv;
  451.   end;
  452.   {$nonamespace tagMONCONVSTRUCT}
  453.   TMonConvStruct = tagMONCONVSTRUCT;
  454.  
  455. const
  456.   MAX_MONITORS = 4;
  457.   APPCLASS_MONITOR = 1;
  458.   XTYP_MONITOR = $00F0 or XCLASS_NOTIFICATION or XTYPF_NOBLOCK;
  459.  
  460. { Callback filter flags for use with MONITOR apps - 0 implies no monitor
  461.   callbacks. }
  462.  
  463. const
  464.   MF_HSZ_INFO = $01000000;
  465.   MF_SENDMSGS = $02000000;
  466.   MF_POSTMSGS = $04000000;
  467.   MF_CALLBACKS = $08000000;
  468.   MF_ERRORS = $10000000;
  469.   MF_LINKS = $20000000;
  470.   MF_CONV = $40000000;
  471.  
  472.   ddelib = 'user32.dll';
  473.  
  474. implementation
  475.  
  476. function DdeInitializeA;         external ddelib name 'DdeInitializeA';
  477. function DdeInitializeW;         external ddelib name 'DdeInitializeW';
  478. function DdeInitialize;         external ddelib name 'DdeInitializeA';
  479. function DdeUninitialize;          external ddelib name 'DdeUninitialize';
  480. function DdeConnectList;           external ddelib name 'DdeConnectList';
  481. function DdeQueryNextServer;       external ddelib name 'DdeQueryNextServer';
  482. function DdeDisconnectList;        external ddelib name 'DdeDisconnectList';
  483. function DdeConnect;               external ddelib name 'DdeConnect';
  484. function DdeDisconnect;            external ddelib name 'DdeDisconnect';
  485. function DdeReconnect;             external ddelib name 'DdeReconnect';
  486. function DdeQueryConvInfo;         external ddelib name 'DdeQueryConvInfo';
  487. function DdeSetUserHandle;         external ddelib name 'DdeSetUserHandle';
  488. function DdeAbandonTransaction;    external ddelib name 'DdeAbandonTransaction';
  489. function DdePostAdvise;            external ddelib name 'DdePostAdvise';
  490. function DdeEnableCallback;        external ddelib name 'DdeEnableCallback';
  491. function DdeNameService;           external ddelib name 'DdeNameService';
  492. function DdeClientTransaction;     external ddelib name 'DdeClientTransaction';
  493. function DdeCreateDataHandle;      external ddelib name 'DdeCreateDataHandle';
  494. function DdeAddData;               external ddelib name 'DdeAddData';
  495. function DdeGetData;               external ddelib name 'DdeGetData';
  496. function DdeAccessData;            external ddelib name 'DdeAccessData';
  497. function DdeUnaccessData;          external ddelib name 'DdeUnaccessData';
  498. function DdeFreeDataHandle;        external ddelib name 'DdeFreeDataHandle';
  499. function DdeGetLastError;          external ddelib name 'DdeGetLastError';
  500. function DdeCreateStringHandleA; external ddelib name 'DdeCreateStringHandleA';
  501. function DdeCreateStringHandleW; external ddelib name 'DdeCreateStringHandleW';
  502. function DdeCreateStringHandle; external ddelib name 'DdeCreateStringHandleA';
  503. function DdeQueryStringA;        external ddelib name 'DdeQueryStringA';
  504. function DdeQueryStringW;        external ddelib name 'DdeQueryStringW';
  505. function DdeQueryString;        external ddelib name 'DdeQueryStringA';
  506. function DdeFreeStringHandle;      external ddelib name 'DdeFreeStringHandle';
  507. function DdeKeepStringHandle;      external ddelib name 'DdeKeepStringHandle';
  508. function DdeCmpStringHandles;      external ddelib name 'DdeCmpStringHandles';
  509.  
  510. end.
  511.