共用方式為


IIndexableConcept::GetAt 方法 (dbgmodel.h)

GetAt 方法會從索引物件內擷取位於特定 N 維索引處的值。 N 維度的索引器,其中 N 是從 GetDimensionality 傳回的值必須受到支援。 請注意,不同型別 (可以在不同網域中為對象編製索引,例如:可透過序數和字串編製索引) 。 如果索引超出範圍 (或無法存取) ,則方法會傳回失敗;不過,在這種情況下,輸出物件仍可設定為錯誤物件。

語法

HRESULT GetAt(
  IModelObject                *contextObject,
  ULONG64                     indexerCount,
  IModelObject                **indexers,
  _COM_Errorptr_ IModelObject **object,
  IKeyStore                   **metadata
);

參數

contextObject

實例物件 (此指標) 要在此傳遞索引。

indexerCount

正在編製物件索引的維度數目。

indexers

陣列 (根據 indexerCount) 索引的大小,指出實例物件內要存取的位置。

object

此處會傳回位於指定索引處的專案值。 如果方法失敗,可能會在這裡以錯誤物件的形式傳回擴充錯誤資訊。

metadata

此處可能會傳回索引元素的選擇性元數據。

傳回值

這個方法會傳回 HRESULT,表示成功或失敗。

備註

範例實作:

// Consider that we are pairing this with the same MyObjectIterator class 
// shown in the example snippet for IModelIterator::GetNext.
IFACEMETHOD(GetAt)(_In_ IModelObject *pContextObject, 
                   _In_ ULONG64 indexerCount, 
                   _In_reads_(indexerCount) IModelObject **ppIndexers, 
                   _COM_Errorptr_ **ppValue, 
                   _COM_Outptr_opt_result_maybenull_ IKeyStore **ppMetadata)
{
    HRESULT hr = S_OK;
    *ppValue = nullptr;
    if (ppMetadata != nullptr)
    {
        *ppMetadata = nullptr;
    }

    if (indexerCount != 1)
    {
        return E_INVALIDARG;
    }

    ComPtr<IModelObject> spValue;

    ULONG64 numElements;
    ComPtr<IModelObject> spNumElements;
    hr = pContextObject->GetKeyValue(L"NumElements", &spNumElements, nullptr));
    if (SUCCEEDED(hr))
    {
        VARIANT vtNumElements;
        hr = spNumElements->GetIntrinsicValueAs(VT_UI8, &vtNumElements));
        if (SUCCEEDED(hr))
        {
            VARIANT vtIdx;
            hr = ppIndexers[0]->GetIntrinsicValueAs(VT_UI8, &vtIdx));
            if (SUCCEEDED(hr))
            {
                if (vtIdx.ullVal >= vtNumElements.ullVal)
                {
                    return E_BOUNDS;
                }

                VARIANT vtValue;
                vtValue.vt = VT_UI8;
                vtValue.ullVal = vtIdx.ullVal + 10;
                hr = GetManager()->CreateIntrinsicObject(ObjectIntrinsic, 
                                                         &vtValue, 
                                                         &spValue);
            }
        }
    }

    if (SUCCEEDED(hr))
    {
        *ppValue = spValue.Detach();
    }

    return hr;
}

規格需求

需求
標頭 dbgmodel.h

另請參閱

IIndexableConcept 介面