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 donde N es el valor devuelto de GetDimensionality. Tenga en cuenta que un objeto puede ser indizable en dominios diferentes por tipos diferentes (por ejemplo: indizable a través de ordinales y cadenas). Si el índice está fuera del intervalo (o no se puede acceder a él), 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á indexando se pasa aquí.

indexerCount

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

indexers

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

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

Los metadatos opcionales sobre el elemento indexado se pueden devolver aquí.

Valor devuelto

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

Observaciones

Implementación de ejemplo de :

// 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
encabezado de dbgmodel.h

Consulte también

de interfaz IIndexableConcept