|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.