Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Метод GetNext перемещает итератор вперед и извлекает следующий итерированный элемент. Если объект индексируется в дополнение к итерации, и это указывается аргументом GetDefaultIndexDimensionality, возвращающим ненулевое значение, этот метод может при необходимости возвращать индексы по умолчанию, чтобы вернуться к созданному значению от индексатора. Обратите внимание, что вызывающий объект может передать 0/nullptr и не получить индексы. Он считается незаконным для вызывающего объекта запрашивать частичные индексы (например, меньше числа, созданного GetDefaultIndexDimensionality).
Если итератор успешно перемещен, но при чтении значения итерированного элемента произошла ошибка, метод может вернуть ошибку AND заполнить "объект" объектом ошибки. В конце итерации содержащихся элементов итератор вернет E_BOUNDS из метода GetNext. Любой последующий вызов (если не был промежуточный вызов сброса) также вернет E_BOUNDS.
Синтаксис
HRESULT GetNext(
_COM_Errorptr_ IModelObject **object,
ULONG64 dimensions,
IModelObject **indexers,
IKeyStore **metadata
);
Параметры
object
Объект, созданный из итератора, возвращается здесь.
dimensions
Количество измерений индекса по умолчанию, запрашиваемого вызывающим элементом. Если значение равно нулю, вызывающий объект не хочет возвращаемого по умолчанию индекса. Если оно не равно нулю, оно должно быть по крайней мере таким же высоким, как размерность индекса по умолчанию.
indexers
Буфер измерений размера, который будет заполнен индексами по умолчанию, чтобы вернуться к возвращаемому элементу от индексатора.
metadata
Если в этом аргументе есть какие-либо метаданные, связанные с итерированным элементом, он возвращается (необязательно).
Возвращаемое значение
Этот метод возвращает HRESULT.
Замечания
пример кода
// The full class is shown here for clarity on the iterator! For the sake
// of example, this iterator produces integers from 10 to
// 10 + <value of 'NumElements' key> which are indexed by a linear 0-based index.
class MyObjectIterator :
public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<
Microsoft::WRL::RuntimeClassType::ClassicCom
>,
IModelIterator
>
{
public:
IFACEMETHOD(Reset)()
{
m_position = m_numElements = 0;
ComPtr<IModelObject> spNumElements;
HRESULT hr = m_spContextObject->GetKeyValue(L"NumElements",
&spNumElements,
nullptr);
if (SUCCEEDED(hr))
{
VARIANT vtVal;
if (SUCCEEDED(spNumElements->GetIntrinsicValueAs(VT_UI8, &vtVal)))
{
m_numElements = vtVal.ullVal;
}
}
return hr;
}
IFACEMETHOD(GetNext)(_COM_Errorptr_ IModelObject **ppValue,
_In_ ULONG64 dimensions,
_Out_writes_(dimensions) IModelObject **ppIndexers,
_COM_Outptr_opt_result_maybe_null_ IKeyStore *ppMetadata)
{
HRESULT hr = S_OK;
*ppMetadata = nullptr;
for (ULONG64 i = 0; i < dimensions; ++i)
{
ppIndexers[i] = nullptr;
}
// We are indexable in one dimension. Verify the call is valid.
// The caller either doesn't care (dimensions == 0) or passes the number
// of dimensions we indicate (dimensions == 1)
if (dimensions != 0 && dimensions != 1)
{
return E_INVALIDARG;
}
// E_BOUNDS indicates the end of the iteration
if (m_position >= m_numElements)
{
return E_BOUNDS;
}
ComPtr<IModelObject> spValue;
ComPtr<IModelObject> spIndex;
VARAINT vtValue;
vtValue.vt = VT_UI8;
vtValue.ullVal = m_position + 10; // Just as example. We produce
// values from 10 -> 10 + 'NumElements'
hr = GetManager()->CreateIntrinsicObject(ObjectIntrinsic, &vtValue, &spValue);
if (SUCCEEDED(hr))
{
if (dimensions == 1)
{
VARIANT vtIdx;
vtIdx.vt = VT_UI8;
vtIdx.ullVal = m_position;
hr = GetManager()->CreateIntrinsicObject(ObjectIntrinsic,
&vtIdx,
&spIndex);
}
}
if (SUCCEEDED(hr))
{
*ppValue = spValue.Detach();
if (dimensions == 1)
{
ppIndexers[0] = spIndex.Detach();
}
++m_position;
}
return hr;
}
HRESULT RuntimeClassInitialize(_In_ IModelObject *pContextObject)
{
m_spContextObject = pContextObject;
return Reset();
}
private:
ULONG64 m_position;
ULONG64 m_numElements;
ComPtr<IModelObject> m_spContextObject;
};
Требования
Требование | Ценность |
---|---|
заголовка | dbgmodel.h |