Справочник по технологии COM
Страница 102. SafeArrayGetElement


 

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;
}

 
Следующая статья »