Compartir a través de


Método IIndexableConcept::GetAt (dbgmodel.h)

El método GetAt recupera el valor en un índice N dimensional determinado desde dentro del objeto indizado. Se debe admitir un indexador de N dimensiones en las que N es el valor devuelto de GetDimensionality. Tenga en cuenta que un objeto puede ser indexable en dominios diferentes por tipos diferentes (por ejemplo: indexable a través de ordinales y cadenas). Si el índice está fuera del intervalo (o no se pudo acceder), el método devolverá un error; sin embargo, en tales casos, el objeto de salida todavía se puede establecer en un objeto de error.

Sintaxis

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

Parámetros

contextObject

El objeto de instancia (este puntero) que se está indizando se pasa aquí.

indexerCount

Número de dimensiones en las que se indiza el objeto.

indexers

Matriz (de tamaño según indexerCount) de índices que indican dónde se va a tener acceso dentro del objeto de instancia.

object

El valor del elemento en los índices especificados se devuelve aquí. Si se produce un error en el método, se puede devolver información de error extendida aquí como un objeto de error.

metadata

Aquí se pueden devolver metadatos opcionales sobre el elemento indexado.

Valor devuelto

Este método devuelve HRESULT, que indica que se ha realizado correctamente o no.

Comentarios

Implementación de ejemplo:

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

Requisitos

Requisito Valor
Header dbgmodel.h

Consulte también

Interfaz IIndexableConcept