Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

COleSafeArray и GetElement()

82  
krys посетитель10.01.07 09:41
NEW 10.01.07 09:41 
Привет.
В моей тест программке есть следующий код:
CString str=_T("Test");
COleSafeArray m_sa;
DWORD numElements[] = {5,1};
m_sa.Create(VT_BSTR, 2, numElements);
int r, c;
VARIANT v;

long index[2];
index[0] = 0;
index[1] = 0;
VariantInit(&v);
v.vt = VT_BSTR;
v.bstrVal = str.AllocSysString();
m_sa.PutElement(index,v.bstrVal);
VARIANT vRes;
m_sa.GetElement(index, &vRes);
CString strRes;=(CString)vRes.bstrVal;
.....
Последняя строчка вызывает ошибку, т.к. vRes не содержит никаких значений.
Почему vRes не получает содержимое массива по указанному адресу?
стойте там и слушайте сюда, именно отсюда будет проистекать
#1 
  scorpi_ nobody10.01.07 15:45
NEW 10.01.07 15:45 
в ответ krys 10.01.07 09:41, Последний раз изменено 11.01.07 10:43 (scorpi_)
GetElement возвращает указатель на саму строку, поэтому такие строчки сработали бы -
wchar_t *p;
m_sa.GetElement( index, &p );


И юзай _variant_t вместо голимого VARIANT, это намного безопасней.

#2 
  alb0 посетитель11.01.07 08:59
11.01.07 08:59 
в ответ krys 10.01.07 09:41
CString strRes;=(CString)vRes.bstrVal;
_________________________________________
USES_CONVERSION;
CString strRes = OLE2T(vRes.bstrVal);
#3