home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2000 September / VPR0009A.BIN / VS60SP4JPN / support / ocdb.h < prev    next >
C/C++ Source or Header  |  1999-03-02  |  46KB  |  1,733 lines

  1. /*=--------------------------------------------------------------------------=
  2.  * ocdb.h
  3.  *=--------------------------------------------------------------------------=
  4.  * defines the interfaces and constants for use with the OLE Controls Data
  5.  * binding interfaces.
  6.  *
  7.  * Copyright (c) 1994-1998 Microsoft Corporation, All Rights Reserved.
  8.  *
  9.  *
  10.  *
  11.  */
  12. #ifndef __OCDB_H_
  13.  
  14. #undef Delete
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18.  
  19. /* LPDBSTRs are MultiByte in 16bits, and Unicode in 32bits.
  20.  */
  21. #if defined(_WIN32) && !defined(OLE2ANSI)
  22.  
  23. #define LPDBSTR           LPWSTR
  24. #define DBCHAR            WCHAR
  25. #define ldbstrlen(str)    wcslen(str)
  26. #define ldbstrcpy(a, b)   wcscpy((a), (b))
  27. #define ldbstrcpyn(a,b,n) wcsncpy((a), (b), (n))
  28. #define ldbstrcmp(a, b)   wcscmp((a), (b))
  29. #define ldbstrcat(a, b)   wcscat((a), (b))
  30. #define ldbstrcmpi(a,b)   wcsicmp((a),(b))
  31. #define DBTEXT(quote)     L##quote
  32.  
  33. #else
  34.  
  35. #define LPDBSTR           LPSTR
  36. #define DBCHAR            char
  37. #define ldbstrlen(str)    lstrlen(str)
  38. #define ldbstrcpy(a, b)   lstrcpy((a), (b))
  39. #define ldbstrcpyn(a,b,n) lstrcpyn((a), (b), (n))
  40. #define ldbstrcmp(a, b)   lstrcmp((a), (b))
  41. #define ldbstrcat(a, b)   lstrcat((a), (b))
  42. #define ldbstrcmpi(a,b)   lstrcmpi((a),(b))
  43. #define DBTEXT(quote)     quote
  44.  
  45. #endif /* _WIN32 && !OLE2ANSI */
  46.  
  47. typedef LPDBSTR FAR *  LPLPDBSTR;
  48.  
  49.  
  50. /* Many systems don't have BLOBs defined.
  51.  */
  52. #ifndef _tagBLOB_DEFINED
  53. #define _tagBLOB_DEFINED
  54. #define _BLOB_DEFINED
  55. #define _LPBLOB_DEFINED
  56.  
  57. typedef struct tagBLOB {
  58.  
  59.     ULONG cbSize;
  60.     BYTE *pBlobData;
  61.  
  62. } BLOB, *LPBLOB;
  63.  
  64. #endif
  65.  
  66. /*----------------------------------------------------------------------------
  67.  *
  68.  *  dbvar.h
  69.  *
  70.  *----------------------------------------------------------------------------
  71.  */
  72. #ifndef _DBCOLUMNID_DEFINED
  73. #define _DBCOLUMNID_DEFINED
  74. typedef enum tagDBCOLKIND
  75.   {
  76.     DBCOLKIND_GUID_NAME = 0,
  77.     DBCOLKIND_GUID_NUMBER = 1,
  78.         DBCOLKIND_NAME = 2
  79.   }
  80. DBCOLKIND;
  81.  
  82. #define GUID_NAMEONLY   {0x88c8d398,0x863c,0x101b,{0xac,0x3b,0x00,0xaa,0x00,0x44,0x77,0x3d}}
  83. #define GUID_NUMBERONLY {0x88c8d399,0x863c,0x101b,{0xac,0x3b,0x00,0xaa,0x00,0x44,0x77,0x3d}}
  84.  
  85. typedef struct tagDBCOLUMNID
  86.   {
  87.   GUID guid;
  88.   DBCOLKIND dwKind;
  89. union
  90.     {
  91.     LONG lNumber;
  92.     LPDBSTR lpdbsz;
  93.     }
  94.   ;
  95.   }
  96. DBCOLUMNID;
  97. #endif   /* ndef _COLUMNID_DEFINED */
  98.  
  99. #ifdef OLD_DEFS
  100. #ifndef _DBVARENUM_DEFINED
  101. #define _DBVARENUM_DEFINED
  102. enum DBVARENUM
  103.   {
  104.     DBTYPE_EMPTY = 0,
  105.     DBTYPE_NULL = 1,
  106.     DBTYPE_I2 = 2,
  107.     DBTYPE_I4 = 3,
  108.     DBTYPE_R4 = 4,
  109.     DBTYPE_R8 = 5,
  110.     DBTYPE_CY = 6,
  111.     DBTYPE_DATE = 7,
  112.     DBTYPE_BOOL = 11,
  113.     DBTYPE_UI2 = 18,
  114.     DBTYPE_UI4 = 19,
  115.         DBTYPE_I8 = 20,
  116.         DBTYPE_UI8 = 21,
  117.     DBTYPE_HRESULT = 25,
  118.     DBTYPE_LPSTR = 30,
  119.     DBTYPE_LPWSTR = 31,
  120.     DBTYPE_FILETIME = 64,
  121.     DBTYPE_BLOB = 65,
  122.     DBTYPE_UUID = 72,
  123.     DBTYPE_DBEXPR = 503,
  124.     DBTYPE_COLUMNID = 507,
  125.     DBTYPE_BYTES = 508,
  126.     DBTYPE_CHARS = 509,
  127.     DBTYPE_WCHARS = 510,
  128.     DBTYPE_ANYVARIANT = 511
  129.   }
  130. ;
  131. #endif   /* ndef _DBVARENUM_DEFINED */
  132. #else
  133. #define DBTYPE_COLUMNID 507
  134. #endif
  135.  
  136. #define DBTYPE_EXT      0x100
  137.  
  138. typedef struct tagDBVARIANT DBVARIANT;
  139.  
  140. struct FARSTRUCT tagDBVARIANT{
  141.     VARTYPE vt;
  142.     unsigned short wReserved1;
  143.     unsigned short wReserved2;
  144.     unsigned short wReserved3;
  145.     union {
  146.       unsigned char bVal;        /* VT_UI1               */
  147.       short    iVal;             /* VT_I2                */
  148.       long     lVal;             /* VT_I4                */
  149.       float    fltVal;           /* VT_R4                */
  150.       double       dblVal;           /* VT_R8                */
  151.       VARIANT_BOOL xbool;             /* VT_BOOL              */
  152.       SCODE    scode;            /* VT_ERROR             */
  153.       CY       cyVal;            /* VT_CY                */
  154.       DATE     date;             /* VT_DATE              */
  155.       BSTR     bstrVal;          /* VT_BSTR              */
  156.       IUnknown     FAR* punkVal;     /* VT_UNKNOWN           */
  157.       IDispatch    FAR* pdispVal;    /* VT_DISPATCH          */
  158.       SAFEARRAY    FAR* parray;      /* VT_ARRAY|*           */
  159.  
  160.       unsigned char FAR *pbVal;      /* VT_BYREF|VT_UI1      */
  161.       short    FAR* piVal;       /* VT_BYREF|VT_I2       */
  162.       long     FAR* plVal;       /* VT_BYREF|VT_I4       */
  163.       float    FAR* pfltVal;     /* VT_BYREF|VT_R4       */
  164.       double       FAR* pdblVal;     /* VT_BYREF|VT_R8       */
  165.       VARIANT_BOOL FAR* pbool;       /* VT_BYREF|VT_BOOL     */
  166.       SCODE    FAR* pscode;      /* VT_BYREF|VT_ERROR    */
  167.       CY       FAR* pcyVal;      /* VT_BYREF|VT_CY       */
  168.       DATE     FAR* pdate;       /* VT_BYREF|VT_DATE     */
  169.       BSTR     FAR* pbstrVal;    /* VT_BYREF|VT_BSTR     */
  170.       IUnknown  FAR* FAR* ppunkVal;  /* VT_BYREF|VT_UNKNOWN  */
  171.       IDispatch FAR* FAR* ppdispVal; /* VT_BYREF|VT_DISPATCH */
  172.       SAFEARRAY FAR* FAR* pparray;   /* VT_BYREF|VT_ARRAY|*  */
  173.       VARIANT      FAR* pvarVal;     /* VT_BYREF|VT_VARIANT  */
  174.  
  175.       void     FAR* byref;       /* Generic ByRef        */
  176.  
  177.       // types new to DBVARIANTs
  178.       //
  179.       BLOB         blob;             /* VT_BLOB              */
  180.       DBCOLUMNID  *pColumnid;        /* DBTYPE_COLUMNID      */
  181.       LPSTR        pszVal;           /* VT_LPSTR             */
  182. #ifdef WIN32
  183.       LPWSTR       pwszVal;          /* VT_LPWSTR            */
  184.       LPWSTR FAR  *ppwszVal;         /* VT_LPWSTR|VT_BYREF   */
  185. #endif /* WIN32 */
  186.       BLOB FAR    *pblob;            /* VT_BYREF|VT_BLOB     */
  187.       DBCOLUMNID **ppColumnid;       /* VT_BYREF|DBTYPE_COLID*/
  188.       DBVARIANT   *pdbvarVal;        /* VT_BYREF|DBTYPE_VARIANT */
  189.     }
  190. #if defined(NONAMELESSUNION) || (defined(_MAC) && !defined(__cplusplus) && !defined(_MSC_VER))
  191.     u
  192. #endif
  193.     ;
  194. };
  195.  
  196. /*----------------------------------------------------------------------------
  197.  *
  198.  *  dbs.h
  199.  *
  200.  *----------------------------------------------------------------------------
  201.  */
  202. typedef enum tagDBROWFETCH
  203.   {
  204.     DBROWFETCH_DEFAULT = 0,
  205.     DBROWFETCH_CALLEEALLOCATES = 1,
  206.     DBROWFETCH_FORCEREFRESH = 2
  207.   }
  208. DBROWFETCH;
  209.  
  210. typedef struct tagDBFETCHROWS
  211.   {
  212.   ULONG      cRowsRequested;
  213.   DWORD      dwFlags;
  214.   VOID HUGEP *pData;
  215.   VOID HUGEP *pVarData;
  216.   ULONG      cbVarData;
  217.   ULONG      cRowsReturned;
  218.   }
  219. DBFETCHROWS;
  220.  
  221. #define DB_NOMAXLENGTH   (DWORD)0
  222. #define DB_NOVALUE       (DWORD)0xFFFFFFFF
  223. #define DB_NULL          (DWORD)0xFFFFFFFF
  224. #define DB_EMPTY         (DWORD)0xFFFFFFFE
  225. #define DB_USEENTRYID    (DWORD)0xFFFFFFFD
  226. #define DB_CANTCOERCE    (DWORD)0xFFFFFFFC
  227. #define DB_TRUNCATED     (DWORD)0xFFFFFFFB
  228. #define DB_UNKNOWN       (DWORD)0xFFFFFFFA
  229. #define DB_NOINFO        (DWORD)0xFFFFFFF9
  230.  
  231. #ifdef OLD_DEFS
  232. typedef enum tagDBBINDING
  233.   {
  234.     DBBINDING_DEFAULT = 0,
  235.     DBBINDING_VARIANT = 1,
  236.     DBBINDING_ENTRYID = 2
  237.   }
  238. DBBINDING;
  239. #else
  240. typedef enum _DBBINDING
  241.   {
  242.     DBBINDING_DEFAULT = 0,
  243.     DBBINDING_VARIANT = 1,
  244.     DBBINDING_ENTRYID = 2
  245.   }
  246. _DBBINDING;
  247. #endif
  248.  
  249. typedef enum tagDBBINDTYPE
  250.   {
  251.         DBBINDTYPE_DATA    = 0,
  252.     DBBINDTYPE_ENTRYID = 1,
  253.     DBBDINTYPE_EITHER  = 2,
  254.     DBBINDTYPE_BOTH    = 3
  255.   }
  256. DBBINDTYPE;
  257.  
  258. typedef struct tagDBCOLUMNBINDING
  259.   {
  260.   DBCOLUMNID columnID;
  261.   ULONG obData;
  262.   ULONG cbMaxLen;
  263.   ULONG obVarDataLen;
  264.   ULONG obInfo;
  265.   DWORD dwBinding;
  266.   DWORD dwDataType;
  267.   }
  268. DBCOLUMNBINDING;
  269.  
  270. typedef struct tagDBBINDPARAMS
  271.   {
  272.   ULONG cbMaxLen;
  273.   DWORD dwBinding;
  274.   DWORD dwDataType;
  275.   ULONG cbVarDataLen;
  276.   DWORD dwInfo;
  277.   void *pData;
  278.   }
  279. DBBINDPARAMS;
  280.  
  281. #define CID_NUMBER_INVALID            -1
  282. #define CID_NUMBER_AUTOINCREMENT       0
  283. #define CID_NUMBER_BASECOLUMNNAME      1
  284. #define CID_NUMBER_BASENAME            2
  285. #define CID_NUMBER_BINARYCOMPARABLE    3
  286. #define CID_NUMBER_BINDTYPE            4
  287. #define CID_NUMBER_CASESENSITIVE       5
  288. #define CID_NUMBER_COLLATINGORDER      6
  289. #define CID_NUMBER_COLUMNID            7
  290. #define CID_NUMBER_CURSORCOLUMN        8
  291. #define CID_NUMBER_DATACOLUMN          9
  292. #define CID_NUMBER_DEFAULTVALUE        10
  293. #define CID_NUMBER_ENTRYIDMAXLENGTH    11
  294. #define CID_NUMBER_FIXED               12
  295. #define CID_NUMBER_HASDEFAULT          13
  296. #define CID_NUMBER_MAXLENGTH           14
  297. #define CID_NUMBER_MULTIVALUED         15
  298. #define CID_NUMBER_NAME                16
  299. #define CID_NUMBER_NULLABLE            17
  300. #define CID_NUMBER_PHYSICALSORT        18
  301. #define CID_NUMBER_NUMBER              19
  302. #define CID_NUMBER_ROWENTRYID          20
  303. #define CID_NUMBER_SCALE               21
  304. #define CID_NUMBER_SEARCHABLE          22
  305. #define CID_NUMBER_TYPE                23
  306. #define CID_NUMBER_UNIQUE              24
  307. #define CID_NUMBER_UPDATABLE           25
  308. #define CID_NUMBER_VERSION             26
  309. #define CID_NUMBER_STATUS              27
  310.  
  311. /* c and C++ have different meanings for const.
  312.  */
  313. #ifdef __cplusplus
  314. #define EXTERNAL_DEFN    extern const
  315. #else
  316. #define EXTERNAL_DEFN    const
  317. #endif /* __cplusplus */
  318.  
  319.  
  320.  
  321. #define _DBCIDGUID {0xfe284700L,0xd188,0x11cd,{0xad,0x48, 0x0,0xaa, 0x0,0x3c,0x9c,0xb6}}
  322. #ifdef DBINITCONSTANTS
  323.  
  324. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMNID_INVALID         = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, -1};
  325. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_AUTOINCREMENT     = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 0};
  326. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BASECOLUMNNAME    = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 1};
  327. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BASENAME          = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 2};
  328. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BINARYCOMPARABLE  = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 3};
  329. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BINDTYPE          = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 4};
  330. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_CASESENSITIVE     = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 5};
  331. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_COLLATINGORDER    = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 6};
  332. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_COLUMNID          = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 7};
  333. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_CURSORCOLUMN      = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 8};
  334. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_DATACOLUMN        = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 9};
  335. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_DEFAULTVALUE      = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 10};
  336. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_ENTRYIDMAXLENGTH  = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 11};
  337. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_FIXED             = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 12};
  338. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_HASDEFAULT        = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 13};
  339. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_MAXLENGTH         = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 14};
  340. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_MULTIVALUED       = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 15};
  341. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_NAME              = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 16};
  342. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_NULLABLE          = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 17};
  343. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_PHYSICALSORT      = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 18};
  344. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_NUMBER            = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 19};
  345. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_ROWENTRYID        = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 20};
  346. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_SCALE             = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 21};
  347. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_SEARCHABLE        = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 22};
  348. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_TYPE              = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 23};
  349. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_UNIQUE            = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 24};
  350. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_UPDATABLE         = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 25};
  351. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_VERSION           = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 26};
  352. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_STATUS            = {_DBCIDGUID, DBCOLKIND_GUID_NUMBER, 27};
  353. #else
  354. extern const DBCOLUMNID NEAR COLUMNID_INVALID;
  355. extern const DBCOLUMNID NEAR COLUMN_AUTOINCREMENT;
  356. extern const DBCOLUMNID NEAR COLUMN_BASECOLUMNNAME;
  357. extern const DBCOLUMNID NEAR COLUMN_BASENAME;
  358. extern const DBCOLUMNID NEAR COLUMN_BINARYCOMPARABLE;
  359. extern const DBCOLUMNID NEAR COLUMN_BINDTYPE;
  360. extern const DBCOLUMNID NEAR COLUMN_CASESENSITIVE;
  361. extern const DBCOLUMNID NEAR COLUMN_COLLATINGORDER;
  362. extern const DBCOLUMNID NEAR COLUMN_COLUMNID;
  363. extern const DBCOLUMNID NEAR COLUMN_CURSORCOLUMN;
  364. extern const DBCOLUMNID NEAR COLUMN_DATACOLUMN;
  365. extern const DBCOLUMNID NEAR COLUMN_DEFAULTVALUE;
  366. extern const DBCOLUMNID NEAR COLUMN_ENTRYIDMAXLENGTH;
  367. extern const DBCOLUMNID NEAR COLUMN_FIXED;
  368. extern const DBCOLUMNID NEAR COLUMN_HASDEFAULT;
  369. extern const DBCOLUMNID NEAR COLUMN_MAXLENGTH;
  370. extern const DBCOLUMNID NEAR COLUMN_MULTIVALUED;
  371. extern const DBCOLUMNID NEAR COLUMN_NAME;
  372. extern const DBCOLUMNID NEAR COLUMN_NULLABLE;
  373. extern const DBCOLUMNID NEAR COLUMN_PHYSICALSORT;
  374. extern const DBCOLUMNID NEAR COLUMN_NUMBER;
  375. extern const DBCOLUMNID NEAR COLUMN_ROWENTRYID;
  376. extern const DBCOLUMNID NEAR COLUMN_SCALE;
  377. extern const DBCOLUMNID NEAR COLUMN_SEARCHABLE;
  378. extern const DBCOLUMNID NEAR COLUMN_TYPE;
  379. extern const DBCOLUMNID NEAR COLUMN_UNIQUE;
  380. extern const DBCOLUMNID NEAR COLUMN_UPDATABLE;
  381. extern const DBCOLUMNID NEAR COLUMN_VERSION;
  382. extern const DBCOLUMNID NEAR COLUMN_STATUS;
  383. #endif
  384.  
  385. #define BMK_NUMBER_BMKTEMPORARY    0
  386. #define BMK_NUMBER_BMKTEMPORARYREL 1
  387. #define BMK_NUMBER_BMKCURSOR       2
  388. #define BMK_NUMBER_BMKCURSORREL    3
  389. #define BMK_NUMBER_BMKSESSION      4
  390. #define BMK_NUMBER_BMKSESSIONREL   5
  391. #define BMK_NUMBER_BMKPERSIST      6
  392. #define BMK_NUMBER_BMKPERSISTREL   7
  393.  
  394.  
  395. #define DBBMKGUID {0xf6304bb0L,0xd188,0x11cd,{0xad,0x48, 0x0,0xaa, 0x0,0x3c,0x9c,0xb6}}
  396. #ifdef DBINITCONSTANTS
  397. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BMKTEMPORARY      = {DBBMKGUID, DBCOLKIND_GUID_NUMBER, 0};
  398. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BMKTEMPORARYREL   = {DBBMKGUID, DBCOLKIND_GUID_NUMBER, 1};
  399. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BMKCURSOR         = {DBBMKGUID, DBCOLKIND_GUID_NUMBER, 2};
  400. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BMKCURSORREL      = {DBBMKGUID, DBCOLKIND_GUID_NUMBER, 3};
  401. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BMKSESSION        = {DBBMKGUID, DBCOLKIND_GUID_NUMBER, 4};
  402. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BMKSESSIONREL     = {DBBMKGUID, DBCOLKIND_GUID_NUMBER, 5};
  403. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BMKPERSIST        = {DBBMKGUID, DBCOLKIND_GUID_NUMBER, 6};
  404. EXTERNAL_DEFN DBCOLUMNID NEAR COLUMN_BMKPERSISTREL     = {DBBMKGUID, DBCOLKIND_GUID_NUMBER, 7};
  405. #else
  406. extern const DBCOLUMNID NEAR COLUMN_BMKINVALID;
  407. extern const DBCOLUMNID NEAR COLUMN_BMKTEMPORARY;
  408. extern const DBCOLUMNID NEAR COLUMN_BMKTEMPORARYREL;
  409. extern const DBCOLUMNID NEAR COLUMN_BMKCURSOR;
  410. extern const DBCOLUMNID NEAR COLUMN_BMKCURSORREL;
  411. extern const DBCOLUMNID NEAR COLUMN_BMKSESSION;
  412. extern const DBCOLUMNID NEAR COLUMN_BMKSESSIONREL;
  413. extern const DBCOLUMNID NEAR COLUMN_BMKPERSIST;
  414. extern const DBCOLUMNID NEAR COLUMN_BMKPERSISTREL;
  415. #endif
  416.  
  417. #define DB_BMK_SIZE        sizeof(BYTE)
  418. #ifdef DBINITCONSTANTS
  419. #ifdef OLD_DEFS
  420. EXTERNAL_DEFN BYTE NEAR DBBMK_INVALID   = 0x0;
  421. #endif
  422. EXTERNAL_DEFN BYTE NEAR DBBMK_CURRENT   = 0x1;
  423. EXTERNAL_DEFN BYTE NEAR DBBMK_BEGINNING = 0x2;
  424. EXTERNAL_DEFN BYTE NEAR DBBMK_END       = 0x3;
  425. #else
  426. #ifdef OLD_DEFS
  427. extern const BYTE NEAR DBBMK_INVALID;
  428. #endif
  429. extern const BYTE NEAR DBBMK_CURRENT;
  430. extern const BYTE NEAR DBBMK_BEGINNING;
  431. extern const BYTE NEAR DBBMK_END;
  432. #endif
  433.  
  434. typedef enum tagDBCOLUMNBINDOPTS
  435.   {
  436.     DBCOLUMNBINDOPTS_REPLACE = 0,
  437.     DBCOLUMNBINDOPTS_ADD = 1
  438.   }
  439. DBCOLUMNBINDOPTS;
  440.  
  441. typedef enum tagDBUPDATELOCK
  442.   {
  443.     DBUPDATELOCK_PESSIMISTIC = 0,
  444.     DBUPDATELOCK_OPTIMISTIC = 1
  445.   }
  446. DBUPDATELOCK;
  447.  
  448. typedef enum tagDBCOLUMNDATA
  449.   {
  450.     DBCOLUMNDATA_UNCHANGED = 0,
  451.     DBCOLUMNDATA_CHANGED = 1,
  452.         DBCOLUMNDATA_UNKNOWN = 2
  453.   }
  454. DBCOLUMNDATA;
  455.  
  456. typedef enum tagDBROWACTION
  457.   {
  458.     DBROWACTION_IGNORE = 0,
  459.     DBROWACTION_UPDATE = 1,
  460.     DBROWACTION_DELETE = 2,
  461.     DBROWACTION_ADD = 3,
  462.     DBROWACTION_LOCK = 4,
  463.     DBROWACTION_UNLOCK = 5
  464.   }
  465. DBROWACTION;
  466.  
  467. typedef enum tagDBUPDATEABLE
  468.   {
  469.     DBUPDATEABLE_UPDATEABLE = 0,
  470.     DBUPDATEABLE_NOTUPDATEABLE = 1,
  471.     DBUPDATEABLE_UNKNOWN = 2
  472.   }
  473. DBUPDATEABLE;
  474.  
  475. #ifdef OLD_DEFS
  476. typedef struct tagDBROWSTATUS
  477.   {
  478.   HRESULT hrStatus;
  479.   BLOB Bookmark;
  480.   }
  481. DBROWSTATUS;
  482. #endif
  483.  
  484. typedef enum tagDBEVENTWHATS
  485.   {
  486.     DBEVENT_CURRENT_ROW_CHANGED = 1,
  487.     DBEVENT_CURRENT_ROW_DATA_CHANGED = 2,
  488.     DBEVENT_NONCURRENT_ROW_DATA_CHANGED = 4,
  489.     DBEVENT_SET_OF_COLUMNS_CHANGED = 8,
  490.     DBEVENT_ORDER_OF_COLUMNS_CHANGED = 16,
  491.     DBEVENT_SET_OF_ROWS_CHANGED = 32,
  492.     DBEVENT_ORDER_OF_ROWS_CHANGED = 64,
  493.     DBEVENT_METADATA_CHANGED = 128,
  494.     DBEVENT_ASYNCH_OP_FINISHED = 256,
  495.     DBEVENT_FIND_CRITERIA_CHANGED = 512,
  496.   }
  497. DBEVENTWHATS;
  498.  
  499. typedef enum tagDBREASON
  500.   {
  501.     DBREASON_DELETED = 1,
  502.     DBREASON_INSERTED = 2,
  503.     DBREASON_MODIFIED = 3,
  504.     DBREASON_REMOVEDFROMCURSOR = 4,
  505.     DBREASON_MOVEDINCURSOR = 5,
  506.     DBREASON_MOVE = 6,
  507.     DBREASON_FIND = 7,
  508.     DBREASON_NEWINDEX = 8,
  509.     DBREASON_ROWFIXUP = 9,
  510.     DBREASON_RECALC = 10,
  511.     DBREASON_REFRESH = 11,
  512.     DBREASON_NEWPARAMETERS = 12,
  513.     DBREASON_SORTCHANGED = 13,
  514.     DBREASON_FILTERCHANGED = 14,
  515.     DBREASON_QUERYSPECCHANGED = 15,
  516.     DBREASON_SEEK = 16,
  517.     DBREASON_PERCENT = 17,
  518.     DBREASON_FINDCRITERIACHANGED = 18,
  519.     DBREASON_SETRANGECHANGED = 19,
  520.     DBREASON_ADDNEW = 20,
  521.     DBREASON_MOVEPERCENT = 21,
  522.     DBREASON_BEGINTRANSACT = 22,
  523.     DBREASON_ROLLBACK = 23,
  524.     DBREASON_COMMIT = 24,
  525.     DBREASON_CLOSE = 25,
  526.     DBREASON_BULK_ERROR = 26,
  527.     DBREASON_BULK_NOTTRANSACTABLE = 27,
  528.     DBREASON_BULK_ABOUTTOEXECUTE = 28,
  529.     DBREASON_CANCELUPDATE = 29,
  530.     DBREASON_SETCOLUMN = 30,
  531.     DBREASON_EDIT = 31,
  532.     DBREASON_UNLOAD = 32
  533.   }
  534. #ifdef OLD_DEFS
  535. DBREASON
  536. #else
  537. _DBREASON;
  538. #endif
  539.  
  540. // Arg1 values for DBREASON_FIND
  541. typedef enum tagDBFINDTYPES
  542.   {
  543.   DB_FINDFIRST = 1,
  544.   DB_FINDLAST = 2,
  545.   DB_FINDNEXT = 3,
  546.   DB_FINDPRIOR = 4,
  547.   DB_FIND = 5
  548.   }
  549. DBFINDTYPES;
  550.  
  551. typedef struct tagDBNOTIFYREASON
  552.   {
  553.   DWORD dwReason;
  554.   DBVARIANT arg1;
  555.   DBVARIANT arg2;
  556.   }
  557. DBNOTIFYREASON;
  558.  
  559. //#define DB_E_BADBINDINFO           MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e00)
  560. //#define DB_E_BADBOOKMARK           MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e01)
  561. //#define DB_E_BADCOLUMNID           MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e02)
  562. #define DB_E_BADCRITERIA           MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e03)
  563. #define DB_E_BADENTRYID            MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e04)
  564. #define DB_E_BADFRACTION           MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e05)
  565. //#define DB_E_BADINDEXID            MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e06)
  566. #define DB_E_BADQUERYSPEC          MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e07)
  567. #define DB_E_BADSORTORDER          MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e08)
  568. //#define DB_E_BADVALUES             MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e09)
  569. #define DB_E_CANTCOERCE            MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e0a)
  570. #define DB_E_CANTLOCK              MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e0b)
  571. #define DB_E_COLUMNUNAVAILABLE     MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e0c)
  572. #define DB_E_DATACHANGED           MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e0d)
  573. #define DB_E_INVALIDCOLUMNORDINAL  MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e0e)
  574. #define DB_E_INVALIDINTERFACE      MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e0f)
  575. #define DB_E_LOCKFAILED            MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e10)
  576. #define DB_E_ROWDELETED            MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e11)
  577. #define DB_E_ROWTOOSHORT           MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e12)
  578. //#define DB_E_SCHEMAVIOLATION       MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e13)
  579. #define DB_E_SEEKKINDNOTSUPPORTED  MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e14)
  580. #define DB_E_UPDATEINPROGRESS      MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e15)
  581. #define DB_E_USEENTRYID            MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e16)
  582. #define DB_E_STATEERROR            MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e17)
  583. #define DB_E_BADFETCHINFO          MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e18)
  584. #define DB_E_NOASYNC               MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e19)
  585. #define DB_E_ENTRYIDOPEN           MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e1a)
  586. #define DB_E_BUFFERTOOSMALL        MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0e1b)
  587. #define DB_S_BUFFERTOOSMALL        MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ec0)
  588. #define DB_S_CANCEL                MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ec1)
  589. #define DB_S_DATACHANGED           MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ec2)
  590. #define DB_S_ENDOFCURSOR           MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ec3)
  591. #define DB_S_ENDOFRESULTSET        MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ec4)
  592. #define DB_S_OPERATIONCANCELLED    MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ec5)
  593. #define DB_S_QUERYINTERFACE        MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ec6)
  594. #define DB_S_WORKINGASYNC          MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ec7)
  595. //#define DB_S_COULDNTCOERCE         MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ec8)
  596. #define DB_S_MOVEDTOFIRST          MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ec9)
  597. #define DB_S_CURRENTROWUNCHANGED   MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0eca)
  598. #define DB_S_ROWADDED              MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ecb)
  599. #define DB_S_ROWUPDATED            MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ecc)
  600. #define DB_S_ROWDELETED            MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0ecd)
  601.  
  602. /*----------------------------------------------------------------------------
  603.  *
  604.  *  ICursor
  605.  *
  606.  *----------------------------------------------------------------------------
  607.  */
  608. /* Forward declaration */
  609. //typedef interface ICursor ICursor;
  610.  
  611. #if defined(__cplusplus) && !defined(CINTERFACE)
  612.  
  613. /* C++ Language Binding */
  614. //extern "C" const IID IID_ICursor;
  615.  
  616. interface ICursor : public IUnknown
  617. {
  618. public:
  619.     virtual HRESULT STDMETHODCALLTYPE GetColumnsCursor
  620.     (
  621.     REFIID riid,
  622.     IUnknown **ppvColumnsCursor,
  623.     ULONG *pcRows
  624.     ) = 0;
  625.  
  626.     virtual HRESULT STDMETHODCALLTYPE SetBindings
  627.     (
  628.     ULONG cCol,
  629.     DBCOLUMNBINDING rgBoundColumns[],
  630.     ULONG cbRowLength,
  631.     DWORD dwFlags
  632.     ) = 0;
  633.  
  634.     virtual HRESULT STDMETHODCALLTYPE GetBindings
  635.     (
  636.     ULONG *pcCol,
  637.     DBCOLUMNBINDING *prgBoundColumns[],
  638.     ULONG *pcbRowLength
  639.     ) = 0;
  640.  
  641.     virtual HRESULT STDMETHODCALLTYPE GetNextRows
  642.     (
  643.     LARGE_INTEGER udlRowsToSkip,
  644.     DBFETCHROWS *pFetchParams
  645.     ) = 0;
  646.  
  647.     virtual HRESULT STDMETHODCALLTYPE Requery
  648.     (
  649.         void
  650.     ) = 0;
  651.  
  652. };
  653.  
  654. #else
  655.  
  656. /* C Language Binding */
  657. //extern const IID IID_ICursor;
  658.  
  659. typedef struct ICursorVtbl
  660. {
  661.  
  662.     HRESULT (STDMETHODCALLTYPE FAR *QueryInterface)
  663.     (
  664.         ICursor FAR *this,
  665.     REFIID riid,
  666.     void **ppvObject
  667.     );
  668.  
  669.     ULONG (STDMETHODCALLTYPE FAR *AddRef)
  670.     (
  671.         ICursor FAR *this
  672.     );
  673.  
  674.     ULONG (STDMETHODCALLTYPE FAR *Release)
  675.     (
  676.         ICursor FAR *this
  677.     );
  678.  
  679.     HRESULT (STDMETHODCALLTYPE FAR *GetColumnsCursor)
  680.     (
  681.         ICursor FAR *this,
  682.     REFIID riid,
  683.     IUnknown **ppvColumnsCursor,
  684.     ULONG *pcRows
  685.     );
  686.  
  687.     HRESULT (STDMETHODCALLTYPE FAR *SetBindings)
  688.     (
  689.         ICursor FAR *this,
  690.     ULONG cCol,
  691.     DBCOLUMNBINDING rgBoundColumns[],
  692.     ULONG cbRowLength,
  693.     DWORD dwFlags
  694.     );
  695.  
  696.     HRESULT (STDMETHODCALLTYPE FAR *GetBindings)
  697.     (
  698.         ICursor FAR *this,
  699.     ULONG *pcCol,
  700.     DBCOLUMNBINDING *prgBoundColumns[],
  701.     ULONG *pcbRowLength
  702.     );
  703.  
  704.     HRESULT (STDMETHODCALLTYPE FAR *GetNextRows)
  705.     (
  706.         ICursor FAR *this,
  707.     LARGE_INTEGER udlRowsToSkip,
  708.     DBFETCHROWS *pFetchParams
  709.     );
  710.  
  711.     HRESULT (STDMETHODCALLTYPE FAR *Requery)
  712.     (
  713.         ICursor FAR *this
  714.     );
  715.  
  716. } ICursorVtbl;
  717.  
  718. interface ICursor
  719. {
  720.     ICursorVtbl FAR *lpVtbl;
  721. } ;
  722.  
  723. #ifdef COBJMACROS
  724.  
  725. #define ICursor_QueryInterface(pI, riid, ppvObject) \
  726.     (*(pI)->lpVtbl->QueryInterface)((pI), riid, ppvObject)
  727.  
  728. #define ICursor_AddRef(pI) \
  729.     (*(pI)->lpVtbl->AddRef)((pI))
  730.  
  731. #define ICursor_Release(pI) \
  732.     (*(pI)->lpVtbl->Release)((pI))
  733.  
  734. #define ICursor_GetColumnsCursor(pI, riid, ppvColumnsCursor, pcRows) \
  735.     (*(pI)->lpVtbl->GetColumnsCursor)((pI), riid, ppvColumnsCursor, pcRows)
  736.  
  737. #define ICursor_SetBindings(pI, cCol, rgBoundColumns, cbRowLength, dwFlags) \
  738.     (*(pI)->lpVtbl->SetBindings)((pI), cCol, rgBoundColumns, cbRowLength, dwFlags)
  739.  
  740. #define ICursor_GetBindings(pI, pcCol, prgBoundColumns, pcbRowLength) \
  741.     (*(pI)->lpVtbl->GetBindings)((pI), pcCol, prgBoundColumns, pcbRowLength)
  742.  
  743. #define ICursor_GetNextRows(pI, udlRowsToSkip, pFetchParams) \
  744.     (*(pI)->lpVtbl->GetNextRows)((pI), udlRowsToSkip, pFetchParams)
  745.  
  746. #define ICursor_Requery(pI) \
  747.     (*(pI)->lpVtbl->Requery)((pI))
  748.  
  749. #endif /* COBJMACROS */
  750.  
  751. #endif
  752.  
  753. /*----------------------------------------------------------------------------
  754.  *
  755.  *  ICursorMove
  756.  *
  757.  *----------------------------------------------------------------------------
  758.  */
  759. /* Forward declaration */
  760. //typedef interface ICursorMove ICursorMove;
  761.  
  762. typedef enum tagDBCLONEOPTS
  763.   {
  764.     DBCLONEOPTS_DEFAULT = 0,
  765.     DBCLONEOPTS_SAMEROW = 1
  766.   }
  767. DBCLONEOPTS;
  768.  
  769.  
  770. #if defined(__cplusplus) && !defined(CINTERFACE)
  771.  
  772. /* C++ Language Binding */
  773. //extern "C" const IID IID_ICursorMove;
  774.  
  775. interface ICursorMove : public ICursor
  776. {
  777. public:
  778.     virtual HRESULT STDMETHODCALLTYPE Move
  779.     (
  780.     ULONG cbBookmark,
  781.     void *pBookmark,
  782.     LARGE_INTEGER dlOffset,
  783.     DBFETCHROWS *pFetchParams
  784.     ) = 0;
  785.  
  786.     virtual HRESULT STDMETHODCALLTYPE GetBookmark
  787.     (
  788.     DBCOLUMNID *pBookmarkType,
  789.     ULONG cbMaxSize,
  790.     ULONG *pcbBookmark,
  791.     void *pBookmark
  792.     ) = 0;
  793.  
  794.     virtual HRESULT STDMETHODCALLTYPE Clone
  795.     (
  796.     DWORD dwFlags,
  797.     REFIID riid,
  798.     IUnknown **ppvClonedCursor
  799.     ) = 0;
  800.  
  801. };
  802.  
  803. #else
  804.  
  805. /* C Language Binding */
  806. //extern const IID IID_ICursorMove;
  807.  
  808. typedef struct ICursorMoveVtbl
  809. {
  810.  
  811.     HRESULT (STDMETHODCALLTYPE FAR *QueryInterface)
  812.     (
  813.         ICursorMove FAR *this,
  814.     REFIID riid,
  815.     void **ppvObject
  816.     );
  817.  
  818.     ULONG (STDMETHODCALLTYPE FAR *AddRef)
  819.     (
  820.         ICursorMove FAR *this
  821.     );
  822.  
  823.     ULONG (STDMETHODCALLTYPE FAR *Release)
  824.     (
  825.         ICursorMove FAR *this
  826.     );
  827.  
  828.     HRESULT (STDMETHODCALLTYPE FAR *GetColumnsCursor)
  829.     (
  830.         ICursorMove FAR *this,
  831.     REFIID riid,
  832.     IUnknown **ppvColumnsCursor,
  833.     ULONG *pcRows
  834.     );
  835.  
  836.     HRESULT (STDMETHODCALLTYPE FAR *SetBindings)
  837.     (
  838.         ICursorMove FAR *this,
  839.     ULONG cCol,
  840.     DBCOLUMNBINDING rgBoundColumns[],
  841.     ULONG cbRowLength,
  842.     DWORD dwFlags
  843.     );
  844.  
  845.     HRESULT (STDMETHODCALLTYPE FAR *GetBindings)
  846.     (
  847.         ICursorMove FAR *this,
  848.     ULONG *pcCol,
  849.     DBCOLUMNBINDING *prgBoundColumns[],
  850.     ULONG *pcbRowLength
  851.     );
  852.  
  853.     HRESULT (STDMETHODCALLTYPE FAR *GetNextRows)
  854.     (
  855.         ICursorMove FAR *this,
  856.     LARGE_INTEGER udlRowsToSkip,
  857.     DBFETCHROWS *pFetchParams
  858.     );
  859.  
  860.     HRESULT (STDMETHODCALLTYPE FAR *Requery)
  861.     (
  862.         ICursorMove FAR *this
  863.     );
  864.  
  865.     HRESULT (STDMETHODCALLTYPE FAR *Move)
  866.     (
  867.         ICursorMove FAR *this,
  868.     ULONG cbBookmark,
  869.     void *pBookmark,
  870.     LARGE_INTEGER dlOffset,
  871.     DBFETCHROWS *pFetchParams
  872.     );
  873.  
  874.     HRESULT (STDMETHODCALLTYPE FAR *GetBookmark)
  875.     (
  876.         ICursorMove FAR *this,
  877.     DBCOLUMNID *pBookmarkType,
  878.     ULONG cbMaxSize,
  879.     ULONG *pcbBookmark,
  880.     void *pBookmark
  881.     );
  882.  
  883.     HRESULT (STDMETHODCALLTYPE FAR *Clone)
  884.     (
  885.         ICursorMove FAR *this,
  886.     DWORD dwFlags,
  887.     REFIID riid,
  888.     IUnknown **ppvClonedCursor
  889.     );
  890.  
  891. } ICursorMoveVtbl;
  892.  
  893. interface ICursorMove
  894. {
  895.     ICursorMoveVtbl FAR *lpVtbl;
  896. } ;
  897.  
  898. #ifdef COBJMACROS
  899.  
  900. #define ICursorMove_QueryInterface(pI, riid, ppvObject) \
  901.     (*(pI)->lpVtbl->QueryInterface)((pI), riid, ppvObject)
  902.  
  903. #define ICursorMove_AddRef(pI) \
  904.     (*(pI)->lpVtbl->AddRef)((pI))
  905.  
  906. #define ICursorMove_Release(pI) \
  907.     (*(pI)->lpVtbl->Release)((pI))
  908.  
  909. #define ICursorMove_GetColumnsCursor(pI, riid, ppvColumnsCursor, pcRows) \
  910.     (*(pI)->lpVtbl->GetColumnsCursor)((pI), riid, ppvColumnsCursor, pcRows)
  911.  
  912. #define ICursorMove_SetBindings(pI, cCol, rgBoundColumns, cbRowLength, dwFlags) \
  913.     (*(pI)->lpVtbl->SetBindings)((pI), cCol, rgBoundColumns, cbRowLength, dwFlags)
  914.  
  915. #define ICursorMove_GetBindings(pI, pcCol, prgBoundColumns, pcbRowLength) \
  916.     (*(pI)->lpVtbl->GetBindings)((pI), pcCol, prgBoundColumns, pcbRowLength)
  917.  
  918. #define ICursorMove_GetNextRows(pI, udlRowsToSkip, pFetchParams) \
  919.     (*(pI)->lpVtbl->GetNextRows)((pI), udlRowsToSkip, pFetchParams)
  920.  
  921. #define ICursorMove_Requery(pI) \
  922.     (*(pI)->lpVtbl->Requery)((pI))
  923.  
  924. #define ICursorMove_Move(pI, cbBookmark, pBookmark, dlOffset, pFetchParams) \
  925.     (*(pI)->lpVtbl->Move)((pI), cbBookmark, pBookmark, dlOffset, pFetchParams)
  926.  
  927. #define ICursorMove_GetBookmark(pI, pBookmarkType, cbMaxSize, pcbBookmark, pBookmark) \
  928.     (*(pI)->lpVtbl->GetBookmark)((pI), pBookmarkType, cbMaxSize, pcbBookmark, pBookmark)
  929.  
  930. #define ICursorMove_Clone(pI, dwFlags, riid, ppvClonedCursor) \
  931.     (*(pI)->lpVtbl->Clone)((pI), dwFlags, riid, ppvClonedCursor)
  932. #endif /* COBJMACROS */
  933.  
  934. #endif
  935.  
  936. /*----------------------------------------------------------------------------
  937.  *
  938.  *  ICursorScroll
  939.  *
  940.  *----------------------------------------------------------------------------
  941.  */
  942. /* Forward declaration */
  943. //typedef interface ICursorScroll ICursorScroll;
  944.  
  945. typedef enum tagDBCURSORPOPULATED
  946.   {
  947.     DBCURSORPOPULATED_FULLY = 0,
  948.     DBCURSORPOPULATED_PARTIALLY = 1
  949.   }
  950. DBCURSORPOPULATED;
  951.  
  952.  
  953. #if defined(__cplusplus) && !defined(CINTERFACE)
  954.  
  955. /* C++ Language Binding */
  956. //extern "C" const IID IID_ICursorScroll;
  957.  
  958. interface ICursorScroll : public ICursorMove
  959. {
  960. public:
  961.     virtual HRESULT STDMETHODCALLTYPE Scroll
  962.     (
  963.     ULONG ulNumerator,
  964.     ULONG ulDenominator,
  965.     DBFETCHROWS *pFetchParams
  966.     ) = 0;
  967.  
  968.     virtual HRESULT STDMETHODCALLTYPE GetApproximatePosition
  969.     (
  970.     ULONG cbBookmark,
  971.     void *pBookmark,
  972.     ULONG *pulNumerator,
  973.     ULONG *pulDenominator
  974.     ) = 0;
  975.  
  976.     virtual HRESULT STDMETHODCALLTYPE GetApproximateCount
  977.     (
  978.     LARGE_INTEGER *pudlApproxCount,
  979.     DWORD *pdwFullyPopulated
  980.     ) = 0;
  981.  
  982. };
  983.  
  984. #else
  985.  
  986. /* C Language Binding */
  987. //extern const IID IID_ICursorScroll;
  988.  
  989. typedef struct ICursorScrollVtbl
  990. {
  991.  
  992.     HRESULT (STDMETHODCALLTYPE FAR *QueryInterface)
  993.     (
  994.         ICursorScroll FAR *this,
  995.     REFIID riid,
  996.     void **ppvObject
  997.     );
  998.  
  999.     ULONG (STDMETHODCALLTYPE FAR *AddRef)
  1000.     (
  1001.         ICursorScroll FAR *this
  1002.     );
  1003.  
  1004.     ULONG (STDMETHODCALLTYPE FAR *Release)
  1005.     (
  1006.         ICursorScroll FAR *this
  1007.     );
  1008.  
  1009.     HRESULT (STDMETHODCALLTYPE FAR *GetColumnsCursor)
  1010.     (
  1011.         ICursorScroll FAR *this,
  1012.     REFIID riid,
  1013.     IUnknown **ppvColumnsCursor,
  1014.     ULONG *pcRows
  1015.     );
  1016.  
  1017.     HRESULT (STDMETHODCALLTYPE FAR *SetBindings)
  1018.     (
  1019.         ICursorScroll FAR *this,
  1020.     ULONG cCol,
  1021.     DBCOLUMNBINDING rgBoundColumns[],
  1022.     ULONG cbRowLength,
  1023.     DWORD dwFlags
  1024.     );
  1025.  
  1026.     HRESULT (STDMETHODCALLTYPE FAR *GetBindings)
  1027.     (
  1028.         ICursorScroll FAR *this,
  1029.     ULONG *pcCol,
  1030.     DBCOLUMNBINDING *prgBoundColumns[],
  1031.     ULONG *pcbRowLength
  1032.     );
  1033.  
  1034.     HRESULT (STDMETHODCALLTYPE FAR *GetNextRows)
  1035.     (
  1036.         ICursorScroll FAR *this,
  1037.     LARGE_INTEGER udlRowsToSkip,
  1038.     DBFETCHROWS *pFetchParams
  1039.     );
  1040.  
  1041.     HRESULT (STDMETHODCALLTYPE FAR *Requery)
  1042.     (
  1043.         ICursorScroll FAR *this
  1044.     );
  1045.  
  1046.     HRESULT (STDMETHODCALLTYPE FAR *Move)
  1047.     (
  1048.         ICursorScroll FAR *this,
  1049.     ULONG cbBookmark,
  1050.     void *pBookmark,
  1051.     LARGE_INTEGER dlOffset,
  1052.     DBFETCHROWS *pFetchParams
  1053.     );
  1054.  
  1055.     HRESULT (STDMETHODCALLTYPE FAR *GetBookmark)
  1056.     (
  1057.         ICursorScroll FAR *this,
  1058.     DBCOLUMNID *pBookmarkType,
  1059.     ULONG cbMaxSize,
  1060.     ULONG *pcbBookmark,
  1061.     void *pBookmark
  1062.     );
  1063.  
  1064.     HRESULT (STDMETHODCALLTYPE FAR *Clone)
  1065.     (
  1066.         ICursorScroll FAR *this,
  1067.     DWORD dwFlags,
  1068.     REFIID riid,
  1069.     IUnknown **ppvClonedCursor
  1070.     );
  1071.  
  1072.     HRESULT (STDMETHODCALLTYPE FAR *Scroll)
  1073.     (
  1074.         ICursorScroll FAR *this,
  1075.     ULONG ulNumerator,
  1076.     ULONG ulDenominator,
  1077.     DBFETCHROWS *pFetchParams
  1078.     );
  1079.  
  1080.     HRESULT (STDMETHODCALLTYPE FAR *GetApproximatePosition)
  1081.     (
  1082.         ICursorScroll FAR *this,
  1083.     ULONG cbBookmark,
  1084.     void *pBookmark,
  1085.     ULONG *pulNumerator,
  1086.     ULONG *pulDenominator
  1087.     );
  1088.  
  1089.     HRESULT (STDMETHODCALLTYPE FAR *GetApproximateCount)
  1090.     (
  1091.         ICursorScroll FAR *this,
  1092.     LARGE_INTEGER *pudlApproxCount,
  1093.     DWORD *pdwFullyPopulated
  1094.     );
  1095.  
  1096. } ICursorScrollVtbl;
  1097.  
  1098. interface ICursorScroll
  1099. {
  1100.     ICursorScrollVtbl FAR *lpVtbl;
  1101. } ;
  1102.  
  1103. #ifdef COBJMACROS
  1104.  
  1105. #define ICursorScroll_QueryInterface(pI, riid, ppvObject) \
  1106.     (*(pI)->lpVtbl->QueryInterface)((pI), riid, ppvObject)
  1107.  
  1108. #define ICursorScroll_AddRef(pI) \
  1109.     (*(pI)->lpVtbl->AddRef)((pI))
  1110.  
  1111. #define ICursorScroll_Release(pI) \
  1112.     (*(pI)->lpVtbl->Release)((pI))
  1113.  
  1114. #define ICursorScroll_GetColumnsCursor(pI, riid, ppvColumnsCursor, pcRows) \
  1115.     (*(pI)->lpVtbl->GetColumnsCursor)((pI), riid, ppvColumnsCursor, pcRows)
  1116.  
  1117. #define ICursorScroll_SetBindings(pI, cCol, rgBoundColumns, cbRowLength, dwFlags) \
  1118.     (*(pI)->lpVtbl->SetBindings)((pI), cCol, rgBoundColumns, cbRowLength, dwFlags)
  1119.  
  1120. #define ICursorScroll_GetBindings(pI, pcCol, prgBoundColumns, pcbRowLength) \
  1121.     (*(pI)->lpVtbl->GetBindings)((pI), pcCol, prgBoundColumns, pcbRowLength)
  1122.  
  1123. #define ICursorScroll_GetNextRows(pI, udlRowsToSkip, pFetchParams) \
  1124.     (*(pI)->lpVtbl->GetNextRows)((pI), udlRowsToSkip, pFetchParams)
  1125.  
  1126. #define ICursorScroll_Requery(pI) \
  1127.     (*(pI)->lpVtbl->Requery)((pI))
  1128.  
  1129. #define ICursorScroll_Move(pI, cbBookmark, pBookmark, dlOffset, pFetchParams) \
  1130.     (*(pI)->lpVtbl->Move)((pI), cbBookmark, pBookmark, dlOffset, pFetchParams)
  1131.  
  1132. #define ICursorScroll_GetBookmark(pI, pBookmarkType, cbMaxSize, pcbBookmark, pBookmark) \
  1133.     (*(pI)->lpVtbl->GetBookmark)((pI), pBookmarkType, cbMaxSize, pcbBookmark, pBookmark)
  1134.  
  1135. #define ICursorScroll_Clone(pI, dwFlags, riid, ppvClonedCursor) \
  1136.     (*(pI)->lpVtbl->Clone)((pI), dwFlags, riid, ppvClonedCursor)
  1137.  
  1138. #define ICursorScroll_Scroll(pI, ulNumerator, ulDenominator, pFetchParams) \
  1139.     (*(pI)->lpVtbl->Scroll)((pI), ulNumerator, ulDenominator, pFetchParams)
  1140.  
  1141. #define ICursorScroll_GetApproximatePosition(pI, cbBookmark, pBookmark, pulNumerator, pulDenominator) \
  1142.     (*(pI)->lpVtbl->GetApproximatePosition)((pI), cbBookmark, pBookmark, pulNumerator, pulDenominator)
  1143.  
  1144. #define ICursorScroll_GetApproximateCount(pI, pudlApproxCount, pdwFullyPopulated) \
  1145.     (*(pI)->lpVtbl->GetApproximateCount)((pI), pudlApproxCount, pdwFullyPopulated)
  1146. #endif /* COBJMACROS */
  1147.  
  1148. #endif
  1149.  
  1150. /*----------------------------------------------------------------------------
  1151.  *
  1152.  *  ICursorUpdateARow
  1153.  *
  1154.  *----------------------------------------------------------------------------
  1155.  */
  1156. /* Forward declaration */
  1157. //typedef interface ICursorUpdateARow ICursorUpdateARow;
  1158.  
  1159. typedef enum tagDBEDITMODE
  1160.   {
  1161.     DBEDITMODE_NONE = 1,
  1162.     DBEDITMODE_UPDATE = 2,
  1163.     DBEDITMODE_ADD = 3
  1164.   }
  1165. DBEDITMODE;
  1166.  
  1167.  
  1168. #if defined(__cplusplus) && !defined(CINTERFACE)
  1169.  
  1170. /* C++ Language Binding */
  1171. //extern "C" const IID IID_ICursorUpdateARow;
  1172.  
  1173. interface ICursorUpdateARow : public IUnknown
  1174. {
  1175. public:
  1176.     virtual HRESULT STDMETHODCALLTYPE BeginUpdate
  1177.     (
  1178.     DWORD dwFlags
  1179.     ) = 0;
  1180.  
  1181.     virtual HRESULT STDMETHODCALLTYPE SetColumn
  1182.     (
  1183.     DBCOLUMNID *pcid,
  1184.     DBBINDPARAMS *pBindParams
  1185.     ) = 0;
  1186.  
  1187.     virtual HRESULT STDMETHODCALLTYPE GetColumn
  1188.     (
  1189.     DBCOLUMNID *pcid,
  1190.     DBBINDPARAMS *pBindParams,
  1191.     DWORD *pdwFlags
  1192.     ) = 0;
  1193.  
  1194.     virtual HRESULT STDMETHODCALLTYPE GetEditMode
  1195.     (
  1196.     DWORD *pdwState
  1197.     ) = 0;
  1198.  
  1199.     virtual HRESULT STDMETHODCALLTYPE Update
  1200.     (
  1201.     DBCOLUMNID *pBookmarkType,
  1202.     ULONG *pcbBookmark,
  1203.     void **ppBookmark
  1204.     ) = 0;
  1205.  
  1206.     virtual HRESULT STDMETHODCALLTYPE Cancel
  1207.     (
  1208.         void
  1209.     ) = 0;
  1210.  
  1211.     virtual HRESULT STDMETHODCALLTYPE Delete
  1212.     (
  1213.     void
  1214.     ) = 0;
  1215.  
  1216. };
  1217.  
  1218. #else
  1219.  
  1220. /* C Language Binding */
  1221. //extern const IID IID_ICursorUpdateARow;
  1222.  
  1223. typedef struct ICursorUpdateARowVtbl
  1224. {
  1225.  
  1226.     HRESULT (STDMETHODCALLTYPE FAR *QueryInterface)
  1227.     (
  1228.         ICursorUpdateARow FAR *this,
  1229.     REFIID riid,
  1230.     void **ppvObject
  1231.     );
  1232.  
  1233.     ULONG (STDMETHODCALLTYPE FAR *AddRef)
  1234.     (
  1235.         ICursorUpdateARow FAR *this
  1236.     );
  1237.  
  1238.     ULONG (STDMETHODCALLTYPE FAR *Release)
  1239.     (
  1240.         ICursorUpdateARow FAR *this
  1241.     );
  1242.  
  1243.     HRESULT (STDMETHODCALLTYPE FAR *BeginUpdate)
  1244.     (
  1245.         ICursorUpdateARow FAR *this,
  1246.     DWORD dwFlags
  1247.     );
  1248.  
  1249.     HRESULT (STDMETHODCALLTYPE FAR *SetColumn)
  1250.     (
  1251.         ICursorUpdateARow FAR *this,
  1252.     DBCOLUMNID *pcid,
  1253.     DBBINDPARAMS *pBindParams
  1254.     );
  1255.  
  1256.     HRESULT (STDMETHODCALLTYPE FAR *GetColumn)
  1257.     (
  1258.         ICursorUpdateARow FAR *this,
  1259.     DBCOLUMNID *pcid,
  1260.     DBBINDPARAMS *pBindParams,
  1261.     DWORD *pdwFlags
  1262.     );
  1263.  
  1264.     HRESULT (STDMETHODCALLTYPE FAR *GetEditMode)
  1265.     (
  1266.         ICursorUpdateARow FAR *this,
  1267.     DWORD *pdwState
  1268.     );
  1269.  
  1270.     HRESULT (STDMETHODCALLTYPE FAR *Update)
  1271.     (
  1272.         ICursorUpdateARow FAR *this,
  1273.     DBCOLUMNID *pBookmarkType,
  1274.     ULONG *pcbBookmark,
  1275.     void **ppBookmark
  1276.     );
  1277.  
  1278.     HRESULT (STDMETHODCALLTYPE FAR *Cancel)
  1279.     (
  1280.         ICursorUpdateARow FAR *this
  1281.     );
  1282.  
  1283.     HRESULT (STDMETHODCALLTYPE FAR *Delete)
  1284.     (
  1285.         ICursorUpdateARow FAR *this
  1286.     );
  1287.  
  1288. } ICursorUpdateARowVtbl;
  1289.  
  1290. interface ICursorUpdateARow
  1291. {
  1292.     ICursorUpdateARowVtbl FAR *lpVtbl;
  1293. } ;
  1294.  
  1295. #ifdef COBJMACROS
  1296.  
  1297. #define ICursorUpdateARow_QueryInterface(pI, riid, ppvObject) \
  1298.     (*(pI)->lpVtbl->QueryInterface)((pI), riid, ppvObject)
  1299.  
  1300. #define ICursorUpdateARow_AddRef(pI) \
  1301.     (*(pI)->lpVtbl->AddRef)((pI))
  1302.  
  1303. #define ICursorUpdateARow_Release(pI) \
  1304.     (*(pI)->lpVtbl->Release)((pI))
  1305.  
  1306. #define ICursorUpdateARow_BeginUpdate(pI, dwFlags) \
  1307.     (*(pI)->lpVtbl->BeginUpdate)((pI), dwFlags)
  1308.  
  1309. #define ICursorUpdateARow_SetColumn(pI, pcid, pBindParams) \
  1310.     (*(pI)->lpVtbl->SetColumn)((pI), pcid, pBindParams)
  1311.  
  1312. #define ICursorUpdateARow_GetColumn(pI, pcid, pBindParams, pdwFlags) \
  1313.     (*(pI)->lpVtbl->GetColumn)((pI), pcid, pBindParams, pdwFlags)
  1314.  
  1315. #define ICursorUpdateARow_GetEditMode(pI, pdwState) \
  1316.     (*(pI)->lpVtbl->GetEditMode)((pI), pdwState)
  1317.  
  1318. #define ICursorUpdateARow_Update(pI, pBookmarkType, pcbBookmark, ppBookmark) \
  1319.     (*(pI)->lpVtbl->Update)((pI), pBookmarkType, pcbBookmark, ppBookmark)
  1320.  
  1321. #define ICursorUpdateARow_Cancel(pI) \
  1322.     (*(pI)->lpVtbl->Cancel)((pI))
  1323.  
  1324. #define ICursorUpdateARow_Delete(pI) \
  1325.     (*(pI)->lpVtbl->Delete)((pI))
  1326.  
  1327.  
  1328. #endif /* COBJMACROS */
  1329.  
  1330. #endif
  1331.  
  1332. /*----------------------------------------------------------------------------
  1333.  *
  1334.  *  ICursorFind
  1335.  *
  1336.  *----------------------------------------------------------------------------
  1337.  */
  1338. /* Forward declaration */
  1339. //typedef interface ICursorFind ICursorFind;
  1340.  
  1341. typedef enum tagDBFINDFLAGS
  1342.   {
  1343.     DBFINDFLAGS_FINDNEXT = 1,
  1344.     DBFINDFLAGS_FINDPRIOR = 2,
  1345.     DBFINDFLAGS_INCLUDECURRENT = 4
  1346.   }
  1347. DBFINDFLAGS;
  1348.  
  1349. #ifdef OLD_DEFS
  1350. typedef enum tagDBSEEKFLAGS
  1351.   {
  1352.     DBSEEK_LT    = 1,
  1353.     DBSEEK_LE    = 2,
  1354.     DBSEEK_EQ    = 3,       // EXACT EQUALITY
  1355.     DBSEEK_GT    = 4,
  1356.     DBSEEK_GE    = 5,
  1357.     DBSEEK_PARTIALEQ = 6             // only for strings
  1358.   }
  1359. DBSEEKFLAGS;
  1360. #endif
  1361.  
  1362. #if defined(__cplusplus) && !defined(CINTERFACE)
  1363.  
  1364. /* C++ Language Binding */
  1365. //extern "C" const IID IID_ICursorFind;
  1366.  
  1367. interface ICursorFind : public IUnknown
  1368. {
  1369. public:
  1370.     virtual HRESULT STDMETHODCALLTYPE FindByValues
  1371.     (
  1372.     ULONG            cbBookmark,
  1373.     LPVOID           pBookmark,
  1374.     DWORD            dwFindFlags,
  1375.     ULONG            cValues,
  1376.         DBCOLUMNID       rgColumns[],
  1377.     DBVARIANT        rgValues[],
  1378.     DWORD            rgdwSeekFlags[],
  1379.         DBFETCHROWS FAR *pFetchParams
  1380.     ) = 0;
  1381. };
  1382.  
  1383. #else
  1384.  
  1385. /* C Language Binding */
  1386. //extern const IID IID_ICursorFind;
  1387.  
  1388. typedef struct ICursorFindVtbl
  1389. {
  1390.  
  1391.     HRESULT (STDMETHODCALLTYPE FAR *QueryInterface)
  1392.     (
  1393.         ICursorFind FAR *this,
  1394.     REFIID riid,
  1395.     void **ppvObject
  1396.     );
  1397.  
  1398.     ULONG (STDMETHODCALLTYPE FAR *AddRef)
  1399.     (
  1400.         ICursorFind FAR *this
  1401.     );
  1402.  
  1403.     ULONG (STDMETHODCALLTYPE FAR *Release)
  1404.     (
  1405.         ICursorFind FAR *this
  1406.     );
  1407.  
  1408.     HRESULT (STDMETHODCALLTYPE FAR *FindByValues)
  1409.     (
  1410.         ICursorFind FAR *this,
  1411.     ULONG            cbBookmark,
  1412.     LPVOID           pBookmark,
  1413.     DWORD            dwFindFlags,
  1414.     ULONG            cValues,
  1415.         DBCOLUMNID       rgColumns[],
  1416.     DBVARIANT        rgValues[],
  1417.     DWORD            rgdwSeekFlags[],
  1418.         DBFETCHROWS      pFetchParams
  1419.     );
  1420.  
  1421.  
  1422. } ICursorFindVtbl;
  1423.  
  1424. interface ICursorFind
  1425. {
  1426.     ICursorFindVtbl FAR *lpVtbl;
  1427. } ;
  1428.  
  1429. #ifdef COBJMACROS
  1430.  
  1431. #define ICursorFind_QueryInterface(pI, riid, ppvObject) \
  1432.     (*(pI)->lpVtbl->QueryInterface)((pI), riid, ppvObject)
  1433.  
  1434. #define ICursorFind_AddRef(pI) \
  1435.     (*(pI)->lpVtbl->AddRef)((pI))
  1436.  
  1437. #define ICursorFind_Release(pI) \
  1438.     (*(pI)->lpVtbl->Release)((pI))
  1439.  
  1440. #define ICursorFind_FindByValues(pI, cbB, pB, dwFF, cV, rgC, rgV, rgSF, pF) \
  1441.     (*(pI)->lpVtbl->FindByValues)((pI), cbB, pB, dwFF, cB, rgC, rgV, rgSF, pF)
  1442.  
  1443. #endif /* COBJMACROS */
  1444.  
  1445. #endif
  1446.  
  1447.  
  1448. /*----------------------------------------------------------------------------
  1449.  *
  1450.  *  IEntryID
  1451.  *
  1452.  *----------------------------------------------------------------------------
  1453.  */
  1454. /* Forward declaration */
  1455. //typedef interface IEntryID IEntryID;
  1456.  
  1457. #if defined(__cplusplus) && !defined(CINTERFACE)
  1458.  
  1459. /* C++ Language Binding */
  1460. //extern "C" const IID IID_IEntryID;
  1461.  
  1462. interface IEntryID : public IUnknown
  1463. {
  1464. public:
  1465.     virtual HRESULT STDMETHODCALLTYPE GetInterface
  1466.     (
  1467.     ULONG cbEntryID,
  1468.     void *pEntryID,
  1469.         DWORD dwFlags,
  1470.         REFIID riid,
  1471.     IUnknown **ppvObj
  1472.     ) = 0;
  1473.  
  1474. };
  1475.  
  1476. #else
  1477.  
  1478. /* C Language Binding */
  1479. //extern const IID IID_IEntryID;
  1480.  
  1481. typedef struct IEntryIDVtbl
  1482. {
  1483.  
  1484.     HRESULT (STDMETHODCALLTYPE FAR *QueryInterface)
  1485.     (
  1486.         IEntryID FAR *this,
  1487.     REFIID riid,
  1488.     void **ppvObject
  1489.     );
  1490.  
  1491.     ULONG (STDMETHODCALLTYPE FAR *AddRef)
  1492.     (
  1493.         IEntryID FAR *this
  1494.     );
  1495.  
  1496.     ULONG (STDMETHODCALLTYPE FAR *Release)
  1497.     (
  1498.         IEntryID FAR *this
  1499.     );
  1500.  
  1501.     HRESULT (STDMETHODCALLTYPE FAR *GetInterface)
  1502.     (
  1503.         IEntryID FAR *this,
  1504.     ULONG cbEntryID,
  1505.     void *pEntryID,
  1506.         REFIID riid,
  1507.     IUnknown **ppvObj
  1508.     );
  1509.  
  1510. } IEntryIDVtbl;
  1511.  
  1512. interface IEntryID
  1513. {
  1514.     IEntryIDVtbl FAR *lpVtbl;
  1515. } ;
  1516.  
  1517. #ifdef COBJMACROS
  1518.  
  1519. #define IEntryID_QueryInterface(pI, riid, ppvObject) \
  1520.     (*(pI)->lpVtbl->QueryInterface)((pI), riid, ppvObject)
  1521.  
  1522. #define IEntryID_AddRef(pI) \
  1523.     (*(pI)->lpVtbl->AddRef)((pI))
  1524.  
  1525. #define IEntryID_Release(pI) \
  1526.     (*(pI)->lpVtbl->Release)((pI))
  1527.  
  1528. #define IEntryID_GetInterface(pI, cbEntryID, pEntryID, riid, ppvObj) \
  1529.     (*(pI)->lpVtbl->GetInterface)((pI), cbEntryID, pEntryID, riid, ppvObj)
  1530. #endif /* COBJMACROS */
  1531.  
  1532. #endif
  1533.  
  1534.  
  1535. /*----------------------------------------------------------------------------
  1536.  *
  1537.  *  INotifyDBEvents
  1538.  *
  1539.  *----------------------------------------------------------------------------
  1540.  */
  1541. /* Forward declaration */
  1542. //typedef interface INotifyDBEvents INotifyDBEvents;
  1543.  
  1544. #if defined(__cplusplus) && !defined(CINTERFACE)
  1545.  
  1546. /* C++ Language Binding */
  1547. //extern "C" const IID IID_INotifyDBEvents;
  1548.  
  1549. interface INotifyDBEvents : public IUnknown
  1550. {
  1551. public:
  1552.     virtual HRESULT STDMETHODCALLTYPE OKToDo
  1553.     (
  1554.     DWORD dwEventWhat,
  1555.     ULONG cReasons,
  1556.     DBNOTIFYREASON rgReasons[]
  1557.     ) = 0;
  1558.  
  1559.     virtual HRESULT STDMETHODCALLTYPE Cancelled
  1560.     (
  1561.     DWORD dwEventWhat,
  1562.     ULONG cReasons,
  1563.     DBNOTIFYREASON rgReasons[]
  1564.     ) = 0;
  1565.  
  1566.     virtual HRESULT STDMETHODCALLTYPE SyncBefore
  1567.     (
  1568.     DWORD dwEventWhat,
  1569.     ULONG cReasons,
  1570.     DBNOTIFYREASON rgReasons[]
  1571.     ) = 0;
  1572.  
  1573.     virtual HRESULT STDMETHODCALLTYPE AboutToDo
  1574.     (
  1575.     DWORD dwEventWhat,
  1576.     ULONG cReasons,
  1577.     DBNOTIFYREASON rgReasons[]
  1578.     ) = 0;
  1579.  
  1580.     virtual HRESULT STDMETHODCALLTYPE FailedToDo
  1581.     (
  1582.     DWORD dwEventWhat,
  1583.     ULONG cReasons,
  1584.     DBNOTIFYREASON rgReasons[]
  1585.     ) = 0;
  1586.  
  1587.     virtual HRESULT STDMETHODCALLTYPE SyncAfter
  1588.     (
  1589.     DWORD dwEventWhat,
  1590.     ULONG cReasons,
  1591.     DBNOTIFYREASON rgReasons[]
  1592.     ) = 0;
  1593.  
  1594.     virtual HRESULT STDMETHODCALLTYPE DidEvent
  1595.     (
  1596.     DWORD dwEventWhat,
  1597.     ULONG cReasons,
  1598.     DBNOTIFYREASON rgReasons[]
  1599.     ) = 0;
  1600.  
  1601. };
  1602.  
  1603. #else
  1604.  
  1605. /* C Language Binding */
  1606. extern const IID IID_INotifyDBEvents;
  1607.  
  1608. typedef struct INotifyDBEventsVtbl
  1609. {
  1610.  
  1611.     HRESULT (STDMETHODCALLTYPE FAR *QueryInterface)
  1612.     (
  1613.         INotifyDBEvents FAR *this,
  1614.     REFIID riid,
  1615.     void **ppvObject
  1616.     );
  1617.  
  1618.     ULONG (STDMETHODCALLTYPE FAR *AddRef)
  1619.     (
  1620.         INotifyDBEvents FAR *this
  1621.     );
  1622.  
  1623.     ULONG (STDMETHODCALLTYPE FAR *Release)
  1624.     (
  1625.         INotifyDBEvents FAR *this
  1626.     );
  1627.  
  1628.     HRESULT (STDMETHODCALLTYPE FAR *OKToDo)
  1629.     (
  1630.         INotifyDBEvents FAR *this,
  1631.     DWORD dwEventWhat,
  1632.     ULONG cReasons,
  1633.     DBNOTIFYREASON rgReasons[]
  1634.     );
  1635.  
  1636.     HRESULT (STDMETHODCALLTYPE FAR *Cancelled)
  1637.     (
  1638.         INotifyDBEvents FAR *this,
  1639.     DWORD dwEventWhat,
  1640.     ULONG cReasons,
  1641.     DBNOTIFYREASON rgReasons[]
  1642.     );
  1643.  
  1644.     HRESULT (STDMETHODCALLTYPE FAR *SyncBefore)
  1645.     (
  1646.         INotifyDBEvents FAR *this,
  1647.     DWORD dwEventWhat,
  1648.     ULONG cReasons,
  1649.     DBNOTIFYREASON rgReasons[]
  1650.     );
  1651.  
  1652.     HRESULT (STDMETHODCALLTYPE FAR *AboutToDo)
  1653.     (
  1654.         INotifyDBEvents FAR *this,
  1655.     DWORD dwEventWhat,
  1656.     ULONG cReasons,
  1657.     DBNOTIFYREASON rgReasons[]
  1658.     );
  1659.  
  1660.     HRESULT (STDMETHODCALLTYPE FAR *FailedToDo)
  1661.     (
  1662.         INotifyDBEvents FAR *this,
  1663.     DWORD dwEventWhat,
  1664.     ULONG cReasons,
  1665.     DBNOTIFYREASON rgReasons[]
  1666.     );
  1667.  
  1668.     HRESULT (STDMETHODCALLTYPE FAR *SyncAfter)
  1669.     (
  1670.         INotifyDBEvents FAR *this,
  1671.     DWORD dwEventWhat,
  1672.     ULONG cReasons,
  1673.     DBNOTIFYREASON rgReasons[]
  1674.     );
  1675.  
  1676.     HRESULT (STDMETHODCALLTYPE FAR *DidEvent)
  1677.     (
  1678.         INotifyDBEvents FAR *this,
  1679.     DWORD dwEventWhat,
  1680.     ULONG cReasons,
  1681.     DBNOTIFYREASON rgReasons[]
  1682.     );
  1683.  
  1684. } INotifyDBEventsVtbl;
  1685.  
  1686. interface INotifyDBEvents
  1687. {
  1688.     INotifyDBEventsVtbl FAR *lpVtbl;
  1689. } ;
  1690.  
  1691. #ifdef COBJMACROS
  1692.  
  1693. #define INotifyDBEvents_QueryInterface(pI, riid, ppvObject) \
  1694.     (*(pI)->lpVtbl->QueryInterface)((pI), riid, ppvObject)
  1695.  
  1696. #define INotifyDBEvents_AddRef(pI) \
  1697.     (*(pI)->lpVtbl->AddRef)((pI))
  1698.  
  1699. #define INotifyDBEvents_Release(pI) \
  1700.     (*(pI)->lpVtbl->Release)((pI))
  1701.  
  1702. #define INotifyDBEvents_OKToDo(pI, dwEventWhat, cReasons, rgReasons) \
  1703.     (*(pI)->lpVtbl->OKToDo)((pI), dwEventWhat, cReasons, rgReasons)
  1704.  
  1705. #define INotifyDBEvents_Cancelled(pI, dwEventWhat, cReasons, rgReasons) \
  1706.     (*(pI)->lpVtbl->Cancelled)((pI), dwEventWhat, cReasons, rgReasons)
  1707.  
  1708. #define INotifyDBEvents_SyncBefore(pI, dwEventWhat, cReasons, rgReasons) \
  1709.     (*(pI)->lpVtbl->SyncBefore)((pI), dwEventWhat, cReasons, rgReasons)
  1710.  
  1711. #define INotifyDBEvents_AboutToDo(pI, dwEventWhat, cReasons, rgReasons) \
  1712.     (*(pI)->lpVtbl->AboutToDo)((pI), dwEventWhat, cReasons, rgReasons)
  1713.  
  1714. #define INotifyDBEvents_FailedToDo(pI, dwEventWhat, cReasons, rgReasons) \
  1715.     (*(pI)->lpVtbl->FailedToDo)((pI), dwEventWhat, cReasons, rgReasons)
  1716.  
  1717. #define INotifyDBEvents_SyncAfter(pI, dwEventWhat, cReasons, rgReasons) \
  1718.     (*(pI)->lpVtbl->SyncAfter)((pI), dwEventWhat, cReasons, rgReasons)
  1719.  
  1720. #define INotifyDBEvents_DidEvent(pI, dwEventWhat, cReasons, rgReasons) \
  1721.     (*(pI)->lpVtbl->DidEvent)((pI), dwEventWhat, cReasons, rgReasons)
  1722. #endif /* COBJMACROS */
  1723.  
  1724. #endif
  1725.  
  1726.  
  1727. #ifdef __cplusplus
  1728. }
  1729. #endif
  1730.  
  1731. #define __OCDB_H_
  1732. #endif // __OCDB_H_
  1733.