IModelIterator::GetNext-Methode (dbgmodel.h)
Die GetNext-Methode verschiebt den Iterator nach vorne und ruft das nächste iterierte Element ab. Wenn das Objekt zusätzlich zu iterierbar ist und dies durch das GetDefaultIndexDimensionality-Argument angegeben wird, das einen Wert ungleich null zurückgibt, gibt diese Methode optional die Standardindizes zurück, um zum erzeugten Wert aus dem Indexer zurückzukehren. Beachten Sie, dass ein Aufrufer auswählen kann, 0/nullptr zu übergeben und keine Indizes abzurufen. Es gilt als illegal, dass der Aufrufer partielle Indizes angibt (z. B. kleiner als die von GetDefaultIndexDimensionality erzeugte Zahl).
Wenn der Iterator erfolgreich vorwärts bewegt wurde, aber beim Lesen des Werts des iterierten Elements ein Fehler aufgetreten ist, gibt die Methode möglicherweise einen Fehler zurück UND füllt "object" mit einem Fehlerobjekt. Am Ende der Iteration der enthaltenen Elemente gibt der Iterator E_BOUNDS von der GetNext-Methode zurück. Jeder nachfolgende Aufruf (sofern nicht ein dazwischenliegender Reset-Aufruf erfolgt ist) gibt ebenfalls E_BOUNDS zurück.
Syntax
HRESULT GetNext(
_COM_Errorptr_ IModelObject **object,
ULONG64 dimensions,
IModelObject **indexers,
IKeyStore **metadata
);
Parameter
object
Das vom Iterator erzeugte Objekt wird hier zurückgegeben.
dimensions
Die Anzahl der Dimensionen des Standardindexes, den der Aufrufer anfordert. Wenn dies 0 ist, möchte der Aufrufer nicht, dass der Standardindex zurückgegeben wird. Wenn er ungleich 0 ist, sollte er mindestens so hoch sein wie die Dimensionalität des Standardindexes.
indexers
Ein Puffer mit Größendimensionen, der mit den Standardindizes ausgefüllt wird, um zum zurückgegebenen Element vom Indexer zurückzukehren.
metadata
Wenn dem iterierten Element Metadaten zugeordnet sind, wird es (optional) in diesem Argument zurückgegeben.
Rückgabewert
Diese Methode gibt HRESULT zurück.
Hinweise
Beispielcode
// 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;
};
Anforderungen
Anforderung | Wert |
---|---|
Header | dbgmodel.h |