System.TVarData
Contents |
Informations Delphi
De System.pas
TVarData = packed VType: Word; Reserved1: Word; Reserved2: Word; Reserved3: Word; VSmallInt: SmallInt; VInteger: Integer; VSingle: Single; VDouble: Double; VCurrency: Currency; VDate: TDateTime; VOleStr: PWideChar; VDispatch: Pointer; VError: HRESULT; VBoolean: WordBool; VUnknown: Pointer; VShortInt: ShortInt; VByte: Byte; VWord: Word; VLongWord: Cardinal; VInt64: Int64; VUInt64: UInt64; VString: Pointer; VAny: Pointer; VArray: PVarArray; VPointer: Pointer; VUString: Pointer; VLongs; VWords; end;
Unité : System
Type : structure
Informations C++
De System.hpp
TVarData = class
Unité : System
Type : classe
Champs de classe : Champs System.TVarData
Description
TVarData représente les informations Variant.
TVarData est la classe de base pour les variants.
Remarque : La structure interne d'un variant telle qu'elle est définie par TVarData est identique au type Variant utilisé par les API OLE et Win32.
struct TVarData
{ union { Word VType; // compatible Delphi – membre de type Variant VARTYPE vt; // membre compatible tagVARIANT }; Word Reserved1; Word Reserved2; Word Reserved3; union { // Membres Variant compatibles Delphi Smallint VSmallint; // iVal Integer VInteger; // lVal Single VSingle; // fltVal Double VDouble; // dblVal CurrencyBase VCurrency; // cyVal TDateTimeBase VDate; // date PWideChar VOleStr; // bstrVal IDispatch* VDispatch; // pdispVal HResult VError; // scode WordBool VBoolean; // boolVal IUnknown* VUnknown; // punkVal Byte VByte; // bVal Pointer VString; // ?????? PVarArray VArray; // parray Pointer VPointer; // byref // Membres compatibles tagVARIANT (à partir de OAIDL.H) // Autorise tous types repérés [V] (peuvent apparaître dans un VARIANT à initialiser) LONG lVal; BYTE bVal; SHORT iVal; FLOAT fltVal; DOUBLE dblVal; VARIANT_BOOL boolVal; SCODE scode; CY cyVal; DATE date; BSTR bstrVal; IUnknown *punkVal; IDispatch *pdispVal; SAFEARRAY *parray; BYTE *pbVal; SHORT *piVal; LONG *plVal; FLOAT *pfltVal; DOUBLE *pdblVal; VARIANT_BOOL *pboolVal; 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; INT *pintVal; UINT *puintVal; }; };
VType de TVarData contient le code du type du variant dans ses douze bits de poids faible (les bits définis par varTypeMask).
Les valeurs suivantes sont utilisées pour Vtype :
- define varEmpty (Byte)(0)
- define varNull (ByteByte_Type)(1)
- define varSmallint (ByteByte_Type)(2)
- define varInteger (ByteByte_Type)(3)
- define varSingle (ByteByte_Type)(4)
- define varDouble (ByteByte_Type)(5)
- define varCurrency (ByteByte_Type)(6)
- define varDate (ByteByte_Type)(7)
- define varOleStr (ByteByte_Type)(8)
- define varDispatch (ByteByte_Type)(9)
- define varError (ByteByte_Type)(10)
- define varBoolean (ByteByte_Type)(11)
- define varVariant (ByteByte_Type)(12)
- define varUnknown (ByteByte_Type)(13)
- define varByte (ByteByte_Type)(17)
- define varString (WordWord_Type)(256)
- define varTypeMask (WordWord_Type)(4095)
- define varArray (WordWord_Type)(8192)
- define varByRef (WordWord_Type)(16384)
- define varStrArg (ByteByte_Type)(72)
- define vtInteger (ByteByte_Type)(0)
- define vtBoolean (ByteByte_Type)(1)
- define vtChar (ByteByte_Type)(2)
- define vtExtended (ByteByte_Type)(3)
- define vtString (ByteByte_Type)(4)
- define vtPointer (ByteByte_Type)(5)
- define vtPChar (ByteByte_Type)(6)
- define vtObject (ByteByte_Type)(7)
- define vtClass (ByteByte_Type)(8)
- define vtWideChar (ByteByte_Type)(9)
- define vtPWideChar (ByteByte_Type)(10)
- define vtAnsiString (ByteByte_Type)(11)
- define vtCurrency (ByteByte_Type)(12)
- define vtVariant (ByteByte_Type)(13)
De plus, le bit varArray peut être initialisé pour indiquer que le variant est un tableau, et le bit varByRef peut être initialisé pour indiquer que le variant contient une référence (et non une valeur).
Word Reserved1;
Word Reserved2; Word Reserved3;
Les membres Reserved1, Reserved2 et Reserved3 de TVarData ne sont pas utilisés.
union { Smallint VSmallint;
Integer VInteger; Single VSingle; Double VDouble; CurrencyBase VCurrency; TDateTimeBase VDate; PWideChar VOleStr; Ole2::IDispatch* VDispatch; Integer VError; WordBool VBoolean; Ole2::IUnknown* VUnknown; Byte VByte; Pointer VString; PVarArray VArray; Pointer VPointer; }; };
Le contenu des huit bits restants de TVarData dépend du champ VType. Si aucun des bits varArray ou varByRef ne sont initialisés, le variant contient une valeur du type donné.
Si le bit varArray est initialisé, le variant contient un pointeur sur une structure TVarArray qui définit les spécificités du tableau. Le type de chaque élément du tableau est donné par les bits varTypeMask dans VType.
Si le bit varByRef est initialisé, le variant contient une référence à une valeur du type donné par les bits varTypeMask et varArray dans VType.
Exemples de code