Функция SafeArrayGetElement (oleauto.h)
Извлекает один элемент массива.
Синтаксис
HRESULT SafeArrayGetElement(
[in] SAFEARRAY *psa,
[in] LONG *rgIndices,
[out] void *pv
);
Параметры
[in] psa
Дескриптор массива, созданный safeArrayCreate.
[in] rgIndices
Вектор индексов для каждого измерения массива. Самым правым (наименее значимым) измерением является rgIndices[0]. Самое левое измерение хранится в rgIndices[psa->cDims – 1]
.
[out] pv
Элемент массива.
Возвращаемое значение
Эта функция может возвращать одно из этих значений.
Код возврата | Описание |
---|---|
|
Успешно. |
|
Указанный индекс недопустим. |
|
Один из аргументов недопустим. |
|
Не удалось выделить память для элемента. |
Комментарии
Эта функция вызывает SafeArrayLock и SafeArrayUnlock автоматически до и после извлечения элемента. Вызывающий объект должен предоставить область хранения правильного размера для получения данных. Если элемент данных является строкой, объектом или вариантом, функция копирует элемент правильным образом.
Примеры
Следующий пример взят из примера SPoly для COM Fundamentals (Cenumpt.cpp).
STDMETHODIMP CEnumPoint::Next(
ULONG celt,
VARIANT rgvar[],
ULONG * pceltFetched)
{
unsigned int i;
long ix;
HRESULT hresult;
for(i = 0; i < celt; ++i)
VariantInit(&rgvar[i]);
for(i = 0; i < celt; ++i){
// Are we at the last element?
if(m_iCurrent == m_celts){
hresult = S_FALSE;
goto LDone;
}
ix = m_iCurrent++;
// m_psa is a global variable that holds the safe array.
hresult = SafeArrayGetElement(m_psa, &ix, &rgvar[i]);
if(FAILED(hresult))
goto LError0;
}
hresult = NOERROR;
LDone:;
if (pceltFetched != NULL)
*pceltFetched = i;
return hresult;
LError0:;
for(i = 0; i < celt; ++i)
VariantClear(&rgvar[i]);
return hresult;
}
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | oleauto.h |
Библиотека | OleAut32.lib |
DLL | OleAut32.dll |