Страница 47 из 111 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; };
|