Annotation of mstools/ole20/h/i386/variant.h, revision 1.1.1.1

1.1       root        1: /*** 
                      2: *variant.h
                      3: *
                      4: *  Copyright (C) 1992-1993, Microsoft Corporation.  All Rights Reserved.
                      5: *
                      6: *Purpose:
                      7: *  This file declares VARIANT, and related data types.
                      8: *
                      9: *Implementation Notes:
                     10: *  This file requires ole2.h
                     11: *
                     12: *****************************************************************************/
                     13: 
                     14: #ifndef _VARIANT_H_
                     15: #define _VARIANT_H_
                     16: 
                     17: 
                     18: #ifndef HUGEP
                     19: # ifdef _MAC
                     20: #  define HUGEP FAR
                     21: # else
                     22: #  if WIN32
                     23: #   define HUGEP
                     24: #  else
                     25: #   define HUGEP _huge
                     26: #  endif
                     27: # endif
                     28: #endif
                     29: 
                     30: 
                     31: /* Forward Declarations */
                     32: 
                     33: #ifdef __cplusplus
                     34: interface IDispatch;
                     35: interface IDispatchW;
                     36: #else
                     37: typedef interface IDispatch IDispatch;
                     38: typedef interface IDispatchW IDispatchW;
                     39: #endif
                     40: 
                     41: 
                     42: #ifdef WIN32
                     43: 
                     44:   typedef LPSTR BSTR;
                     45:   typedef BSTR * LPBSTR;
                     46: 
                     47:   typedef LPWSTR WBSTR;
                     48:   typedef WBSTR * LPWBSTR;
                     49: 
                     50:   #ifdef UNICODE
                     51: 
                     52:     typedef WBSTR TBSTR;
                     53:     typedef LPWBSTR LPTBSTR;
                     54: 
                     55:   #else /* ANSI */
                     56: 
                     57:     typedef BSTR TBSTR;
                     58:     typedef LPBSTR LPTBSTR;
                     59: 
                     60:   #endif
                     61:          
                     62: #else /* WIN16 or _MAC */
                     63: 
                     64:   typedef char FAR* BSTR;
                     65:   typedef BSTR FAR* LPBSTR;
                     66: 
                     67: #endif   
                     68: 
                     69: 
                     70: typedef struct FARSTRUCT tagSAFEARRAYBOUND {
                     71:     unsigned long cElements;
                     72:     long lLbound;
                     73: } SAFEARRAYBOUND, FAR* LPSAFEARRAYBOUND;
                     74: 
                     75: typedef struct FARSTRUCT tagSAFEARRAY {
                     76:     unsigned short cDims;
                     77:     unsigned short fFeatures;
                     78:     unsigned short cbElements;
                     79:     unsigned short cLocks;
                     80:     unsigned long handle;
                     81:     void HUGEP* pvData;
                     82:     SAFEARRAYBOUND rgsabound[1];
                     83: } SAFEARRAY, FAR* LPSAFEARRAY;
                     84: 
                     85: #define FADF_AUTO       0x0001 /* array is allocated on the stack         */
                     86: #define FADF_STATIC     0x0002 /* array is staticly allocated             */
                     87: #define FADF_EMBEDDED   0x0004 /* array is embedded in a structure        */
                     88: #define FADF_FIXEDSIZE  0x0010 /* array may not be resized or reallocated */
                     89: #define FADF_BSTR       0x0100 /* an array of BSTRs                       */
                     90: #define FADF_UNKNOWN    0x0200 /* an array of IUnknown*                   */
                     91: #define FADF_DISPATCH   0x0400 /* an array of IDispatch*                  */
                     92: #define FADF_VARIANT    0x0800 /* an array of VARIANTs                    */
                     93: #define FADF_WBSTR      0x1000 /* an array of WBSTRs                      */
                     94: #define FADF_DISPATCHW  0x2000 /* an array of IDispatchW*                 */
                     95: #define FADF_RESERVED   0xF0E8  /* bits reserved for future use            */
                     96: 
                     97: 
                     98: /* 0 == FALSE, -1 == TRUE */
                     99: typedef short VARIANT_BOOL;
                    100: 
                    101: 
                    102: typedef double DATE;
                    103: 
                    104: 
                    105: /* This is a helper struct for use in handling currency. */
                    106: typedef struct FARSTRUCT tagCY {
                    107: #ifdef _MAC
                    108:     long         Hi;
                    109:     unsigned long Lo;
                    110: #else
                    111:     unsigned long Lo;
                    112:     long         Hi;
                    113: #endif
                    114: } CY;
                    115: 
                    116: 
                    117: /*
                    118:  * VARENUM usage key,
                    119:  *
                    120:  *   [V] - may appear in a VARIANT
                    121:  *   [T] - may appear in a TYPEDESC
                    122:  *   [P] - may appear in an OLE property set
                    123:  *
                    124:  */
                    125: enum VARENUM
                    126: {
                    127:     VT_EMPTY           = 0,   /* [V]   [P]  nothing                     */
                    128:     VT_NULL            = 1,   /* [V]        SQL style Null              */
                    129:     VT_I2              = 2,   /* [V][T][P]  2 byte signed int           */
                    130:     VT_I4              = 3,   /* [V][T][P]  4 byte signed int           */
                    131:     VT_R4              = 4,   /* [V][T][P]  4 byte real                 */
                    132:     VT_R8              = 5,   /* [V][T][P]  8 byte real                 */
                    133:     VT_CY              = 6,   /* [V][T][P]  currency                    */
                    134:     VT_DATE            = 7,   /* [V][T][P]  date                        */
                    135:     VT_BSTR            = 8,   /* [V][T][P]  binary string               */
                    136:     VT_DISPATCH        = 9,   /* [V][T]     IDispatch FAR*              */
                    137:     VT_ERROR           = 10,  /* [V][T]     SCODE                       */
                    138:     VT_BOOL            = 11,  /* [V][T][P]  True=-1, False=0            */
                    139:     VT_VARIANT         = 12,  /* [V][T][P]  VARIANT FAR*                */
                    140:     VT_UNKNOWN         = 13,  /* [V][T]     IUnknown FAR*               */
                    141:     VT_WBSTR           = 14,  /* [V][T]     wide binary string          */
                    142:     VT_DISPATCHW       = 15,  /* [V][T]     IDispatchW *               */
                    143: 
                    144:     VT_I1              = 16,  /*    [T]     signed char                 */
                    145:     VT_UI1             = 17,  /*    [T]     unsigned char               */
                    146:     VT_UI2             = 18,  /*    [T]     unsigned short              */
                    147:     VT_UI4             = 19,  /*    [T]     unsigned short              */
                    148:     VT_I8              = 20,  /*    [T][P]  signed 64-bit int           */
                    149:     VT_UI8             = 21,  /*    [T]     unsigned 64-bit int         */
                    150:     VT_INT             = 22,  /*    [T]     signed machine int          */
                    151:     VT_UINT            = 23,  /*    [T]     unsigned machine int        */
                    152:     VT_VOID            = 24,  /*    [T]     C style void                */
                    153:     VT_HRESULT         = 25,  /*    [T]                                 */
                    154:     VT_PTR             = 26,  /*    [T]     pointer type                */
                    155:     VT_SAFEARRAY       = 27,  /*    [T]     (use VT_ARRAY in VARIANT)   */
                    156:     VT_CARRAY          = 28,  /*    [T]     C style array               */
                    157:     VT_USERDEFINED     = 29,  /*    [T]     user defined type          */
                    158:     VT_LPSTR           = 30,  /*    [T][P]  null terminated string      */
                    159:     VT_LPWSTR          = 31,  /*    [T][P]  wide null terminated string */
                    160: 
                    161:     VT_FILETIME        = 64,  /*       [P]  FILETIME                    */
                    162:     VT_BLOB            = 65,  /*       [P]  Length prefixed bytes       */
                    163:     VT_STREAM          = 66,  /*       [P]  Name of the stream follows  */
                    164:     VT_STORAGE         = 67,  /*       [P]  Name of the storage follows */
                    165:     VT_STREAMED_OBJECT = 68,  /*       [P]  Stream contains an object   */
                    166:     VT_STORED_OBJECT   = 69,  /*       [P]  Storage contains an object  */
                    167:     VT_BLOB_OBJECT     = 70,  /*       [P]  Blob contains an object     */
                    168:     VT_CF              = 71,  /*       [P]  Clipboard format            */
                    169:     VT_CLSID           = 72   /*       [P]  A Class ID                  */
                    170: };
                    171: 
                    172: #define VT_VECTOR      0x1000 /*       [P]  simple counted array        */
                    173: #define VT_ARRAY       0x2000 /* [V]        SAFEARRAY*                  */
                    174: #define VT_BYREF       0x4000 /* [V]                                    */
                    175: #define VT_RESERVED    0x8000
                    176: 
                    177: 
                    178: typedef unsigned short VARTYPE;
                    179: 
                    180: typedef struct FARSTRUCT tagVARIANT VARIANT;
                    181: typedef struct FARSTRUCT tagVARIANT FAR* LPVARIANT;
                    182: typedef struct FARSTRUCT tagVARIANT VARIANTARG;
                    183: typedef struct FARSTRUCT tagVARIANT FAR* LPVARIANTARG;
                    184: 
                    185: struct FARSTRUCT tagVARIANT{
                    186:     VARTYPE vt;
                    187:     unsigned short wReserved1;
                    188:     unsigned short wReserved2;
                    189:     unsigned short wReserved3;
                    190:     union {
                    191:       short       iVal;             /* VT_I2                */
                    192:       long        lVal;             /* VT_I4                */
                    193:       float       fltVal;           /* VT_R4                */
                    194:       double      dblVal;           /* VT_R8                */
                    195:       VARIANT_BOOL bool;             /* VT_BOOL              */
                    196:       SCODE       scode;            /* VT_ERROR             */
                    197:       CY          cyVal;            /* VT_CY                */
                    198:       DATE        date;             /* VT_DATE              */
                    199:       BSTR        bstrVal;          /* VT_BSTR              */
                    200: #ifdef WIN32
                    201:       WBSTR       wbstrVal;         /* VT_WBSTR             */
                    202: #endif                  
                    203:       IUnknown    FAR* punkVal;     /* VT_UNKNOWN           */
                    204:       IDispatch           FAR* pdispVal;    /* VT_DISPATCH          */
                    205: #ifdef WIN32      
                    206:       IDispatchW   FAR* pdispwVal;   /* VT_DISPATCHW         */
                    207: #endif
                    208:       SAFEARRAY           FAR* parray;      /* VT_ARRAY|*           */
                    209: 
                    210:       short       FAR* piVal;       /* VT_BYREF|VT_I2       */
                    211:       long        FAR* plVal;       /* VT_BYREF|VT_I4       */
                    212:       float       FAR* pfltVal;     /* VT_BYREF|VT_R4       */
                    213:       double      FAR* pdblVal;     /* VT_BYREF|VT_R8       */
                    214:       VARIANT_BOOL FAR* pbool;       /* VT_BYREF|VT_BOOL     */
                    215:       SCODE       FAR* pscode;      /* VT_BYREF|VT_ERROR    */
                    216:       CY          FAR* pcyVal;      /* VT_BYREF|VT_CY       */
                    217:       DATE        FAR* pdate;       /* VT_BYREF|VT_DATE     */
                    218:       BSTR        FAR* pbstrVal;    /* VT_BYREF|VT_BSTR     */
                    219: #ifdef WIN32
                    220:       LPWBSTR          pwbstrVal;   /* VT_BYREF|VT_WBSTR    */
                    221: #endif            
                    222:       IUnknown FAR* FAR* ppunkVal;   /* VT_BYREF|VT_UNKNOWN  */
                    223:       IDispatch FAR* FAR* ppdispVal; /* VT_BYREF|VT_DISPATCH */
                    224: #ifdef WIN32      
                    225:       IDispatchW **     ppdispwVal;  /* VT_BYREF|VT_DISPATCHW */
                    226: #endif
                    227:       SAFEARRAY FAR* FAR* pparray;   /* VT_BYREF|VT_ARRAY|*  */
                    228:       VARIANT     FAR* pvarVal;     /* VT_BYREF|VT_VARIANT  */
                    229: 
                    230:       void        FAR* byref;       /* Generic ByRef        */
                    231:     }
                    232: #if defined(NONAMELESSUNION) || (defined(_MAC) && !defined(__cplusplus) && !defined(_MSC_VER))
                    233:     u
                    234: #endif
                    235:     ;
                    236: };
                    237: 
                    238: #if defined(NONAMELESSUNION) || (defined(_MAC) && !defined(__cplusplus) && !defined(_MSC_VER))
                    239: # define V_UNION(X, Y) ((X)->u.Y)
                    240: #else
                    241: # define V_UNION(X, Y) ((X)->Y)
                    242: #endif
                    243: 
                    244: /* Variant access macros */
                    245: #define V_VT(X)          ((X)->vt)
                    246: #define V_ISBYREF(X)     (V_VT(X)&VT_BYREF)
                    247: #define V_ISARRAY(X)     (V_VT(X)&VT_ARRAY)
                    248: #define V_ISVECTOR(X)    (V_VT(X)&VT_VECTOR)
                    249: 
                    250: #define V_NONE(X)        V_I2(X)
                    251: #define V_I2(X)                 V_UNION(X, iVal)
                    252: #define V_I2REF(X)       V_UNION(X, piVal)
                    253: #define V_I4(X)          V_UNION(X, lVal)
                    254: #define V_I4REF(X)       V_UNION(X, plVal)
                    255: #define V_R4(X)                 V_UNION(X, fltVal)
                    256: #define V_R4REF(X)       V_UNION(X, pfltVal)
                    257: #define V_R8(X)                 V_UNION(X, dblVal)
                    258: #define V_R8REF(X)       V_UNION(X, pdblVal)
                    259: #define V_BOOL(X)        V_UNION(X, bool)
                    260: #define V_BOOLREF(X)     V_UNION(X, pbool)
                    261: #define V_ERROR(X)       V_UNION(X, scode)
                    262: #define V_ERRORREF(X)    V_UNION(X, pscode)
                    263: #define V_CY(X)                 V_UNION(X, cyVal)
                    264: #define V_CYREF(X)       V_UNION(X, pcyVal)
                    265: #define V_DATE(X)        V_UNION(X, date)
                    266: #define V_DATEREF(X)     V_UNION(X, pdate)
                    267: #define V_BSTR(X)        V_UNION(X, bstrVal)
                    268: #define V_BSTRREF(X)     V_UNION(X, pbstrVal)
                    269: #define V_UNKNOWN(X)     V_UNION(X, punkVal)
                    270: #define V_UNKNOWNREF(X)  V_UNION(X, ppunkVal)
                    271: #define V_DISPATCH(X)    V_UNION(X, pdispVal)
                    272: #define V_DISPATCHREF(X) V_UNION(X, ppdispVal)
                    273: #define V_VARIANTREF(X)  V_UNION(X, pvarVal)
                    274: #define V_ARRAY(X)       V_UNION(X, parray)
                    275: #define V_ARRAYREF(X)    V_UNION(X, pparray)
                    276: #define V_BYREF(X)       V_UNION(X, byref)
                    277: 
                    278: #ifdef WIN32
                    279: #define V_DISPATCHW(X)   V_UNION(X, pdispwVal)
                    280: #define V_DISPATCHWREF(X) V_UNION(X, ppdispwVal)
                    281: #define V_WBSTR(X)       V_UNION(X, wbstrVal)
                    282: #define V_WBSTRREF(X)    V_UNION(X, pwbstrVal)
                    283: #endif
                    284: 
                    285: #endif /* _VARIANT_H_ */
                    286: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.