А чего вы нагородили-то? Вы индус? 2/3 кода к делу вроде не относятся: чего-то туда-сюда копируете типы меняете? Зачем два SAFEARRAY? И память у вас течет, вроде. Ну процессор вам положим не жалко, нечего ему без дела сидеть, а по клавишам тучать сильно любите что ли? Надо SAFEARRAY с двумя строчкамия? Примерно так:
SAFEARRAY* pSa = SafeArrayCreateVector(VT_BSTR, 0, 2);
BSTR* pBSTR = reinterpret_cast<BSTR>(pSa->pvData);
pBSTR[0]=SysAllocString(L"Hello!");
pBSTR[1]=SysAllocString(L"World!");
Result->vt = VT_ARRAY|VT_BSTR;
Result->parray = pSa;
Написал из головы, может чего поправить надо, но в целом примерно так.