共用方式為


IModelIterator::GetNext 方法 (dbgmodel.h)

GetNext 方法會將反覆運算器向前移動,並擷取下一個逐一查看的專案。 如果物件除了可反覆運算,而且這是由傳回非零值的 GetDefaultIndexDimensionality 自變數所指出,這個方法可能會選擇性地傳回預設索引,以從索引器傳回產生的值。 請注意,呼叫端可以選擇傳遞 0/nullptr,而不會擷取任何索引。 呼叫端要求部分索引 (不合法,例如:小於 GetDefaultIndexDimensionality) 所產生的數位。

如果反覆運算器成功向前移動,但讀取反覆運算元素的值時發生錯誤,方法可能會傳回錯誤 ,並 填入錯誤物件“object”。 在內含專案的反覆運算結束時,反覆運算器會從 GetNext 方法傳回E_BOUNDS。 除非有交錯重設呼叫,否則任何後續呼叫 () 也會傳回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

另請參閱

IModelIterator 介面