Для пердачи массивов в COM используется вариант, который хранит массив вариантов. См. в MSDN описание функций
SafeArrayCreate
SafeArrayCreateEx
и т.д.
Кусок кода который я привел как раз и работает по этому механизму. Из MSDN-а он и взят. я думаю тема закрыта