Страница 102 из 111 SafeArrayGetElement Возвращает элемент массива. HRESULT SafeArrayGetEIement ( SAFEARRAY FAR* рsа, long FAR* rglndices, void FAR* pv );
Параметры: psa Указатель на дескриптор массива, созданный с помощью SafeArrayCreate. rglndices Указывает на вектор индексов по каждому измерению массива. Самый правый (наименее значащий) индекс находится в rgIndices[0]. Самый левый индекс хранится в rgIndices[psa->cDims-1]. pv Указатель, по которому возвращается элемент массива. Комментарии: Перед считыванием элемента и после этого функция автоматически вызывает SafeArray-Lock и SafeArrayUnlock. Вызывающий должен предоставить для размещения возвращаемых данных область памяти надлежащего размера. Функция обеспечивает корректное копирование элемента, который представляет собой строку, объект или вариант. Коды возврата: Из возвращенного HRESULT получают один из следующих кодов возврата: Код возврата | Значение | S_OK | Успех. | DISP_E_BADINDEX | Задан неверный индекс. | E_INVALIDARG | Один из аргументов неверен. | E_OUTOFMEMORY | Не удается выделить память для элемента. | Пример: STDMETHODIMP CEnumPoint::Next( ULONG celt, VARIANT FAR rgvar[], ULONG FAR* pceltFetched) { unsigned int i; long ix; HRESULT hresult;
for (i = 0; i < celt; ++i) VariantiInit(&rgvar[i]); for(i = 0; i < celt; ++i) { if(m_iCurrent == m_celts) { hresult = ReportResult(0, S_FALSE, 0, 0); goto LDone; ix = m_iCurrent++; hresult = SafeArrayGet Element (m_psa, &ix, &rgvar[i]); if(FAILED(hresult)) goto LErrorO; } hresult = NOERROR; LDone: *pceltFetched = i; return hresult; LErrorO: for(i = 0; i < celt; ++i) VariantClear(&rgvar[i]); return hresult; }
|