Citando l'aiuto Delphi 2007:
Usa GetEnumName per convertire un valore enumerato Delphi nel nome simbolico che rappresenta nel codice.
Ciò significa che non si può utilizzare a tal fine, come TVarData.VType non è un valore enumerato, ma un numero intero che è impostato su una delle costanti in System.pas che vengono prese da l'SDK di Windows wtypes.h file. Guarda la fonte di GetEnumName(), restituisce immediatamente una stringa contenente il valore dell'intero.
Edit:
c'è qualche altro modo per ottenere la rappresentazione di stringa di TVarData.VType
È possibile determinare la rappresentazione di stringa manualmente. Per prima cosa è necessario essere consapevoli del fatto che ci sono molti bit di informazione codificati in quel numero intero, quindi una semplice istruzione case o una ricerca di array non funzionerà. I 12 bit inferiori sono la maschera di tipo ei bit superiori codificano le informazioni sul tipo di vettore o array e sul fatto che sia fornito per riferimento o meno. Le parti importanti sono:
const
varTypeMask = $0FFF;
varArray = $2000;
varByRef = $4000;
Così si potrebbe fare qualcosa di simile:
function VariantTypeName(const AValue: TVarData): string;
begin
case AValue.VType and varTypeMask of
vtInteger: Result := 'integer';
// ...
end;
if AValue.VType and varArray <> 0 then
Result := 'array of ' + Result;
if AValue.VType and varByRef <> 0 then
Result := Result + ' by ref';
end;
suggerisco a segnare la risposta di The_Fox come accettata. – mghie