delphidelphi-xe5variants

What does mean VarType(aVariant) = 273 (or $111)?


What does mean VarType(aVariant) = 273 (or $111)? It's undocumented variant type. VarTypeAsText(aVariant) returns Expression illegal in evaluator error.


Solution

  • From the source code of the system unit:

    const
    { Variant type codes (wtypes.h) }
    
      varEmpty    = $0000; { vt_empty        0 }
      varNull     = $0001; { vt_null         1 }
      varSmallint = $0002; { vt_i2           2 }
      varInteger  = $0003; { vt_i4           3 }
      varSingle   = $0004; { vt_r4           4 }
      varDouble   = $0005; { vt_r8           5 }
      varCurrency = $0006; { vt_cy           6 }
      varDate     = $0007; { vt_date         7 }
      varOleStr   = $0008; { vt_bstr         8 }
      varDispatch = $0009; { vt_dispatch     9 }
      varError    = $000A; { vt_error       10 }
      varBoolean  = $000B; { vt_bool        11 }
      varVariant  = $000C; { vt_variant     12 }
      varUnknown  = $000D; { vt_unknown     13 }
    //varDecimal  = $000E; { vt_decimal     14 } {UNSUPPORTED as of v6.x code base}
    //varUndef0F  = $000F; { undefined      15 } {UNSUPPORTED per Microsoft}
      varShortInt = $0010; { vt_i1          16 }
      varByte     = $0011; { vt_ui1         17 }
      varWord     = $0012; { vt_ui2         18 }
      varLongWord = $0013; { vt_ui4         19 }
      varInt64    = $0014; { vt_i8          20 }
      varUInt64   = $0015; { vt_ui8         21 }
      varRecord   = $0024; { VT_RECORD      36 }
    {  if adding new items, update Variants' varLast, BaseTypeMap and OpTypeMap }
    
      varStrArg   = $0048; { vt_clsid        72 }
      varObject   = $0049; {                 73 }
      varUStrArg  = $004A; {                 74 }
      varString   = $0100; { Pascal string  256 } {not OLE compatible }
      varAny      = $0101; { Corba any      257 } {not OLE compatible }
      varUString  = $0102; { Unicode string 258 } {not OLE compatible }
      // custom types range from $110 (272) to $7FF (2047)
    

    See the comment at the very bottom of the list. In other words, $111 is a custom variant type. Exactly what it is depends on the code that defined that type. Code that is not in the RTL and is presumably in your program.