IModelIterator::GetNext-Methode (dbgmodel.h)
Die GetNext-Methode verschiebt den Iterator vorwärts und ruft das nächste iterierte Element ab. Wenn das Objekt zusätzlich zu iterierbar ist und dies durch das Argument GetDefaultIndexDimensionality angegeben wird, das einen Wert ungleich Null zurückgibt, kann diese Methode optional die Standardindizes zurückgeben, um zum erzeugten Wert vom Indexer zurückzukehren. Beachten Sie, dass ein Aufrufer wählen kann, 0/nullptr zu übergeben und keine Indizes abzurufen. Es gilt als illegal, dass der Aufrufer Teilindizes anfordert (z. B.: kleiner als die von GetDefaultIndexDimensionality erzeugte Zahl).
Wenn der Iterator erfolgreich vorwärts verschoben wurde, aber beim Lesen des Werts des iterierten Elements ein Fehler aufgetreten ist, gibt die Methode möglicherweise einen Fehler AND füllen "Objekt" mit einem Fehlerobjekt zurück. Am Ende der Iteration der enthaltenen Elemente gibt der Iterator E_BOUNDS aus der GetNext-Methode zurück. Alle nachfolgenden Aufrufe (es sei denn, es wurde ein Rückruf dazwischen gestellt) wird auch E_BOUNDS zurückgegeben.
Syntax
HRESULT GetNext(
_COM_Errorptr_ IModelObject **object,
ULONG64 dimensions,
IModelObject **indexers,
IKeyStore **metadata
);
Parameter
object
Das aus dem Iterator erzeugte Objekt wird hier zurückgegeben.
dimensions
Die Anzahl der Dimensionen des Standardindexes, den der Aufrufer anfordert. Wenn dies null ist, wünscht der Aufrufer nicht, dass der Standardindex zurückgegeben wird. Wenn sie ungleich Null ist, sollte sie mindestens so hoch sein wie die Dimensionalität des Standardindexes.
indexers
Ein Puffer von Größenabmessungen, die mit den Standardindizes gefüllt werden, um zum zurückgegebenen Element vom Indexer zurückzukehren.
metadata
Wenn dem iterierten Element Metadaten zugeordnet sind, wird sie (optional) in diesem Argument zurückgegeben.
Rückgabewert
Diese Methode gibt HRESULT zurück.
Bemerkungen
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 |