Variant 數據類型是所有沒被顯式聲明(例如 Dim、Private、Public 或 Static等語句)為其他類型變數的數據類型。Variant 數據類型並沒有類型聲明字元。
基本介紹
- 中文名:Variant
- 外文名:Phonetic symbol
- 計: 變體型
- 化: 變體
單詞釋義
數據類型
1.VarArrayCreate functionCreates a variant array.創建一個變體類型的數組。function VarArrayCreate(const Bounds: array of Integer; VarType: TVarType): Variant;VarArrayOf functionCreates and fills a one-dimensional variant array.創建並且填充一個一維的變體類型的數組。function VarArrayOf(const Values: array of Variant): Variant;VarArrayCreate, VarArrayOf ExamplevarA: Variant;beginA := VarArrayCreate([0, 4], varVariant);A[0] := 1;A[1] := 1234.5678;A[2] := 'Hello world';A[3] := True;A[4] := VarArrayOf([1, 10, 100, 1000]);WriteLn(A[2]); { Hello world }WriteLn(A[4][2]); { 100 }end;2.VarArrayLock functionLocks a variant array and returns a pointer to the data.鎖住一個變體類型的數組並且返回一個指向這個數據的指針。function VarArrayLock(const A: Variant): Pointer;VarArrayLock, VarArrayUnlock ExampletypePArrayData = ^TArrayData;TArrayData = array[0..9, 1..3] of Integer;varA: Variant;P: PArrayData;I, J: Integer;beginA := VarArrayCreate([1, 3, 0, 9], varInteger);P := VarArrayLock(A);tryfor I := 0 to 9 dofor J := 1 to 3 doP^[I, J] := J * 10 + I;finallyVarArrayUnlock(A);end;WriteLn(A[1, 9]); { 19 }WriteLn(A[3, 4]); { 34 }end;3.VarArrayUnlock procedureUnlocks a variant array.procedure VarArrayUnlock(var A: Variant);VARIANT 數據類型在檔案OAIDL.IDL中定義如下:struct tagVARIANT {union {struct __tagVARIANT {VARTYPE vt;WORD wReserved1;WORD wReserved2;WORD wReserved3;union {ULONGLONG ullVal;LONGLONG llVal;LONG lVal;BYTE bVal;SHORT iVal;FLOAT fltVal;DOUBLE dblVal;VARIANT_BOOL boolVal;_VARIANT_BOOL bool;SCODE scode;CY cyVal;DATE date;BSTR bstrVal;IUnknown * punkVal;IDispatch * pdispVal;SAFEARRAY * parray;BYTE * pbVal;SHORT * piVal;LONG * plVal;LONGLONG * pllVal;FLOAT * pfltVal;DOUBLE * pdblVal;VARIANT_BOOL *pboolVal;_VARIANT_BOOL *pbool;SCODE * pscode;CY * pcyVal;DATE * pdate;BSTR * pbstrVal;IUnknown ** ppunkVal;IDispatch ** ppdispVal;SAFEARRAY ** pparray;VARIANT * pvarVal;PVOID byref;CHAR cVal;USHORT uiVal;ULONG ulVal;INT intVal;UINT uintVal;DECIMAL * pdecVal;CHAR * pcVal;USHORT * puiVal;ULONG * pulVal;ULONGLONG * pullVal;INT * pintVal;UINT * puintVal;struct __tagBRECORD {PVOID pvRecord;IRecordInfo * pRecInfo;} __VARIANT_NAME_4;} __VARIANT_NAME_3;} __VARIANT_NAME_2;DECIMAL decVal;} __VARIANT_NAME_1;};
long lValue = 999;VARIANT vParam;vParam.vt = VT_I4;vParam.lVal = lValue;
typedef unsigned short VARTYPE;enum VARENUM{ VT_EMPTY = 0,VT_NULL = 1,VT_I2 = 2,VT_I4 = 3,VT_R4 = 4,VT_R8 = 5,VT_CY = 6,VT_DATE = 7,VT_BSTR = 8,VT_DISPATCH = 9,VT_ERROR = 10,VT_BOOL = 11,VT_VARIANT = 12,VT_UNKNOWN = 13,VT_DECIMAL = 14,VT_I1 = 16,VT_UI1 = 17,VT_UI2 = 18,VT_UI4 = 19,VT_I8 = 20,VT_UI8 = 21,VT_INT = 22,VT_UINT = 23,VT_VOID = 24,VT_HRESULT = 25,VT_PTR = 26,VT_SAFEARRAY = 27,VT_CARRAY = 28,VT_USERDEFINED = 29,VT_LPSTR = 30,VT_LPWSTR = 31,VT_RECORD = 36,VT_INT_PTR = 37,VT_UINT_PTR = 38,VT_FILETIME = 64,VT_BLOB = 65,VT_STREAM = 66,VT_STORAGE = 67,VT_STREAMED_OBJECT = 68,VT_STORED_OBJECT = 69,VT_BLOB_OBJECT = 70,VT_CF = 71,VT_CLSID = 72,VT_VERSIONED_STREAM = 73,VT_BSTR_BLOB = 0xfff,VT_VECTOR = 0x1000,VT_ARRAY = 0x2000,VT_BYREF = 0x4000,VT_RESERVED = 0x8000,VT_ILLEGAL = 0xffff,VT_ILLEGALMASKED = 0xfff,VT_TYPEMASK = 0xfff} ;
表4-3 VARIANT支持的類型 | |
類型名 | 含義 |
VT_EMPTY | 指示未指定值 |
VT_NULL | 指示空值(類似於 SQL 中的空值) |
VT_I2 | 指示 short 整數 |
VT_I4 | 指示 long 整數 |
VT_R4 | 指示 float 值 |
VT_R8 | 指示 double 值 |
VT_CY | 指示貨幣值 |
VT_DATE | 指示 DATE 值 |
VT_BSTR | 指示 BSTR 字元串 |
VT_DISPATCH | 指示 IDispatch 指針 |
VT_ERROR | 指示 SCODE |
VT_BOOL | 指示一個布爾值 |
VT_VARIANT | 指示 VARIANTfar 指針 |
VT_UNKNOWN | 指示 IUnknown 指針 |
VT_DECIMAL | 指示 decimal 值 |
VT_I1 | 指示 char 值 |
類型名 | 含義 |
VT_UI1 | 指示 byte |
VT_UI2 | 指示 unsignedshort |
VT_UI4 | 指示 unsignedlong |
VT_I8 | 指示 64 位整數 |
VT_UI8 | 指示 64 位無符號整數 |
VT_INT | 指示整數值 |
VT_UINT | 指示 unsigned 整數值 |
VT_VOID | 指示 C 樣式 void |
VT_HRESULT | 指示 HRESULT |
VT_PTR | 指示指針類型 |
VT_SAFEARRAY | 指示 SAFEARRAY |
VT_CARRAY | 指示 C 樣式數組 |
VT_USERDEFINED | 指示用戶定義的類型 |
VT_LPSTR | 指示一個以 NULL 結尾的字元串 |
VT_LPWSTR | 指示由 nullNothingnullptrnull引用(在 Visual Basic 中為 Nothing) 終止的寬字元串 |
VT_RECORD | 指示用戶定義的類型 |
VT_FILETIME | 指示 FILETIME 值 |
VT_BLOB | 指示以長度為前綴的位元組 |
VT_STREAM | 指示隨後是流的名稱 |
VT_STORAGE | 指示隨後是存儲的名稱 |
VT_STREAMED_OBJECT | 指示流包含對象 |
VT_STORED_OBJECT | 指示存儲包含對象 |
VT_BLOB_OBJECT | 指示 Blob 包含對象 |
VT_CF | 指示剪貼簿格式 |
VT_CLSID | 指示類 ID |
VT_VECTOR | 指示簡單的已計數數組 |
VT_ARRAY | 指示 SAFEARRAY 指針 |
VT_BYREF | 指示值為引 |
大眾Variant
車型 | 售價(萬元) |
舒適版 | 34 |
豪華版 | 37.15 |