Re[2]: Проблема с маршалингом массива BSTR в VB
От: Аноним  
Дата: 27.07.06 21:52
Оценка:
А чего вы нагородили-то? Вы индус? 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;
Написал из головы, может чего поправить надо, но в целом примерно так.


А это:

SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound=0;
rgsabound[0].cElements =2;
BSTR HUGEP *pBSTR;
VariantInit(&tmp);
VariantClear(Result);
VariantChangeType(&tmp,&tmp,VARIANT_NOVALUEPROP,VT_ARRAY);
VariantChangeType(Result,Result,VARIANT_NOVALUEPROP,VT_ARRAY);
tmp.parray=SafeArrayCreate(VT_BSTR,1,rgsabound);
Result->parray=SafeArrayCreate(VT_BSTR,1,rgsabound);
hr = SafeArrayAccessData(tmp.parray, (void HUGEP* FAR*)&pBSTR);
pBSTR[0]=SysAllocString(L"Hello!");
pBSTR[1]=SysAllocString(L"World!");
SafeArrayUnaccessData(tmp.parray );;
VariantCopy(Result,&tmp);
VariantClear(&tmp);
return S_OK;

— индуизм какой-то.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.