Partager via


IIndexableConcept ::GetAt, méthode (dbgmodel.h)

La méthode GetAt récupère la valeur d’un index N dimensionnel particulier à partir de l’objet indexé. Un indexeur de N dimensions où N est la valeur renvoyée par GetDimensionality doit être pris en charge. Notez qu’un objet peut être indexable dans différents domaines par différents types (par exemple, indexable via des ordinaux et des chaînes). Si l’index est hors de la plage (ou n’est pas accessible), la méthode retourne un échec ; toutefois, dans ce cas, l’objet de sortie peut toujours être défini sur un objet d’erreur.

Syntaxe

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

Paramètres

contextObject

L’objet instance (ce pointeur) qui est en cours d’indexation est passé ici.

indexerCount

Nombre de dimensions dans laquelle l’objet est indexé.

indexers

Tableau (dimensionné en fonction de l’indexerCount) d’index indiquant l’emplacement à l’intérieur de l’objet instance à accéder.

object

La valeur de l’élément aux index spécifiés est retournée ici. Si la méthode échoue, les informations d’erreur étendues peuvent être retournées ici en tant qu’objet d’erreur.

metadata

Les métadonnées facultatives relatives à l’élément indexé peuvent être retournées ici.

Valeur retournée

Cette méthode retourne HRESULT qui indique la réussite ou l’échec.

Remarques

Exemple d’implémentation :

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

Configuration requise

Condition requise Valeur
En-tête dbgmodel.h

Voir aussi

Interface IIndexableConcept