Здравствуйте, sammael, Вы писали:
S>Есть обект коллекция (часть компонента написанного на visual basic) в basic для доступа к элементам используется конструкция foreach S>... S>Мне интересно как оборачивает basic конструкцию foreach и как можно получить доступ к элементу коллекции из с++
Никак не оборачивает: конструкция foreach — это VB'шный доступ к енумератору коллекции (т.е. к интерфейсу IEnumVARIANT), в котором VB перебирает элементы коллекции по одному (т.е. obj->Next(1, &buffer)).
У тебя проблемы с инициализацией VARIANT-ов: перед передачей их в VB, нужно им присвоить какие-нибудь начальные данные.
В первом случае каждому элементу arrVariant присвоить arrVariant[i].vt = VT_EMPTY или вызвать VariantInit(arrVariant + i).
Во втором случае нужно присвоить тип значения в VARIANT v.vt = VT_I4.
Именно поле vt варианта отвечает за то, инициализирован ли он и что хранит. Если там будет случайное число, то и сообщения об ошибках будут разнообразными.