Citando la ayuda de Delphi 2007:
Uso GetEnumName para convertir un valor enumerado Delphi en el nombre simbólico que lo representa en el código.
Eso significa que no se puede utilizar para tal fin, como TVarData.VType no es un valor enumerado, pero un número entero que se fija a una de las constantes en System.pas que se toman de el SDK de Windows archivo wtypes.h. Mire la fuente de GetEnumName(), devuelve inmediatamente una cadena que contiene el valor del entero.
Editar:
¿hay alguna otra manera de conseguir la representación de cadena de TVarData.VType
Puede determinar la representación de cadena manualmente. Primero debe tener en cuenta que hay varios bits de información codificados en ese entero, por lo que una simple instrucción de caso o búsqueda de matriz no funcionará. Los 12 bits más bajos son la máscara de tipo, y los bits superiores codifican información acerca de si es un vector o tipo de matriz y si se da por referencia o no. Las partes importantes son:
const
varTypeMask = $0FFF;
varArray = $2000;
varByRef = $4000;
por lo que podría hacer algo como:
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;
Sugiero para marcar la respuesta de The_Fox como aceptada. – mghie