public static Type GetSystemType(short input)
{
bool isArray = (((short)VarEnum.VT_ARRAY & input) != 0);
VarEnum varType = (VarEnum)Enum.ToObject(typeof(VarEnum), (input & ~(short)VarEnum.VT_ARRAY));
if (!isArray)
{
switch (varType)
{
case VarEnum.VT_I1: return typeof(sbyte);
case VarEnum.VT_UI1: return typeof(byte);
case VarEnum.VT_I2: return typeof(short);
case VarEnum.VT_UI2: return typeof(ushort);
case VarEnum.VT_I4: return typeof(int);
case VarEnum.VT_UI4: return typeof(uint);
case VarEnum.VT_I8: return typeof(long);
case VarEnum.VT_UI8: return typeof(ulong);
case VarEnum.VT_R4: return typeof(float);
case VarEnum.VT_R8: return typeof(double);
case VarEnum.VT_BOOL: return typeof(bool);
case VarEnum.VT_DATE: return typeof(DateTime);
case VarEnum.VT_BSTR: return typeof(string);
case VarEnum.VT_CY: return typeof(decimal);
case VarEnum.VT_EMPTY: return typeof(object);
case VarEnum.VT_VARIANT: return typeof(object);
}
}
else
{
switch (varType)
{
case VarEnum.VT_I1: return typeof(sbyte[]);
case VarEnum.VT_UI1: return typeof(byte[]);
case VarEnum.VT_I2: return typeof(short[]);
case VarEnum.VT_UI2: return typeof(ushort[]);
case VarEnum.VT_I4: return typeof(int[]);
case VarEnum.VT_UI4: return typeof(uint[]);
case VarEnum.VT_I8: return typeof(long[]);
case VarEnum.VT_UI8: return typeof(ulong[]);
case VarEnum.VT_R4: return typeof(float[]);
case VarEnum.VT_R8: return typeof(double[]);
case VarEnum.VT_BOOL: return typeof(bool[]);
case VarEnum.VT_DATE: return typeof(DateTime[]);
case VarEnum.VT_BSTR: return typeof(string[]);
case VarEnum.VT_CY: return typeof(decimal[]);
case VarEnum.VT_EMPTY: return typeof(object[]);
case VarEnum.VT_VARIANT: return typeof(object[]);
}
}
return null;
}