I suppose you have looked at TVarData ? That uses Variants and requires the variants unit to be used.
TVarData does have all of those as types.
But of course, you won't like using them because of the size of record. For me, Its a great when using them via reference.