private static Array VariantToObjectArray(Array input)
{
int[] dimensions = new int[input.Rank];
for (int ii = 0; ii < dimensions.Length; ii++)
{
dimensions[ii] = input.GetLength(ii);
}
Array output = Array.CreateInstance(typeof(object), dimensions);
int length = output.Length;
int[] indexes = new int[dimensions.Length];
for (int ii = 0; ii < length; ii++)
{
int divisor = output.Length;
for (int jj = 0; jj < indexes.Length; jj++)
{
divisor /= dimensions[jj];
indexes[jj] = (ii/divisor)%dimensions[jj];
}
object value = input.GetValue(indexes);
output.SetValue(GetVARIANT(value), indexes);
}
return output;
}