Freigeben über


IIndexableConcept::GetAt-Methode (dbgmodel.h)

Die GetAt-Methode ruft den Wert an einem bestimmten n-dimensionalen Index innerhalb des indizierten Objekts ab. Ein Indexer mit N-Dimensionen, bei dem N der von GetDimensionality zurückgegebene Wert ist, muss unterstützt werden. Beachten Sie, dass ein Objekt in verschiedenen Domänen nach unterschiedlichen Typen indiziert werden kann (z. B. über Ordnungs- und Zeichenfolgenindizierung). Wenn sich der Index außerhalb des Bereichs befindet (oder nicht zugegriffen werden konnte), gibt die Methode einen Fehler zurück. In solchen Fällen kann das Ausgabeobjekt jedoch weiterhin auf ein Fehlerobjekt festgelegt werden.

Syntax

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

Parameter

contextObject

Das instance -Objekt (dieser Zeiger), das indiziert wird, wird hier übergeben.

indexerCount

Die Anzahl der Dimensionen, in denen das Objekt indiziert wird.

indexers

Ein Array (entsprechend dem IndexerCount) von Indizes, das angibt, wo innerhalb des instance Objekt zugegriffen werden soll.

object

Der Wert des Elements an den angegebenen Indizes wird hier zurückgegeben. Wenn die Methode fehlschlägt, werden hier möglicherweise erweiterte Fehlerinformationen als Fehlerobjekt zurückgegeben.

metadata

Optionale Metadaten zum indizierten Element können hier zurückgegeben werden.

Rückgabewert

Diese Methode gibt HRESULT zurück, was auf Erfolg oder Fehler hinweist.

Hinweise

Beispielimplementierung:

// 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;
}

Anforderungen

Anforderung Wert
Header dbgmodel.h

Weitere Informationen

IIndexableConcept-Schnittstelle