Login
COleSafeArray и GetElement()
82
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 не получает содержимое массива по указанному адресу?
В моей тест программке есть следующий код:
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 не получает содержимое массива по указанному адресу?
стойте там и слушайте сюда, именно отсюда будет проистекать
10.01.07 15:45
in Antwort krys 10.01.07 09:41, Zuletzt geändert 11.01.07 10:43 (scorpi_)
GetElement возвращает указатель на саму строку, поэтому такие строчки сработали бы -
wchar_t *p;
m_sa.GetElement( index, &p );
И юзай _variant_t вместо голимого VARIANT, это намного безопасней.
NEW 11.01.07 08:59
in Antwort krys 10.01.07 09:41
CString strRes;=(CString)vRes.bstrVal;
_________________________________________
USES_CONVERSION;
CString strRes = OLE2T(vRes.bstrVal);
_________________________________________
USES_CONVERSION;
CString strRes = OLE2T(vRes.bstrVal);