Справочник по технологии COM
Страница 47. IEnumVARIANT::Next


 

IEnumVARIANT::Next

Пытается получить следующие celt элементов последовательности перечисления и возвращает их в массиве, на который указывает rgvar.

HRESULT Next
(
unsigned long celt,
VARIANT FAR* rgvar,
unsigned long FAR* pceltFetched
);

Параметры:

  • celt - Число запрашиваемых элементов.
  • rgvar - Массив, в который помещаются возвращающие элементы. Размер массива должен быть не менее celt.
  • pceltFetched - Указатель на число элементов, возвращенных в rgvar, или NULL.

Коды возврата:
Из возвращенного HRESULT получают один из следующих кодов возврата:

Код возврата Значение
S_OK Число возвращенных элементов равно celt.
S_FALSE Число возвращенных элементов меньше celt.

Комментарии:
Если число оставшихся элементов меньше запрошенного, Next возвращает только оставшиеся элементы. Фактическое число элементов передается через *pCeltFetched, если этот параметр не равен NULL.

Пример:
Следующий код реализует IEnumVARIANT::Next для наборов из примера Lines (файл Enumvar.cpp).

STDMETHODIMP
CEnumVariant::Next(ULONG cElements, VARIANT FAR* pvar,
ULONG FAR* pcElementFetched)
{
HRESULT hr;
ULONG l;
long l1;
ULONG l2;

if (pcElementFetched != NULL)
*pcElementFetched = 0;

for (l=0; l< cElements; l++)
Variantlnit(&pvar[l]);

// Получить следующие cElements элементов.

for (l1=m_lCurrent, l2=0; l1<(long)(m_lLBound+m_cElements)
&& l2<cElements; l1++, l2++)
{
hr = SafeArrayGetElement(m_psa, &l1, &pvar[l2]);
if (FAILED(hr)) goto error;
};
// Возвратить число полученных элементов.
if (pcElementFetched != NULL)
*pcElementFetched = l2;
m_lCurrent = l1;
return (l2 < cElements) ? ResultFromScode(S_FALSE) : NOERROR;
error:
for (l=0; l<cElements; l++)
VariantClear(&pvar[l]);
return hr;
};

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