Поделиться через


Функция 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

Элемент массива.

Возвращаемое значение

Эта функция может возвращать одно из этих значений.

Код возврата Описание
S_OK
Успешно.
DISP_E_BADINDEX
Указанный индекс недопустим.
E_INVALIDARG
Один из аргументов недопустим.
E_OUTOFMEMORY
Не удалось выделить память для элемента.

Комментарии

Эта функция вызывает 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