Condividi tramite


Metodo IIndexableConcept::GetAt (dbgmodel.h)

Il metodo GetAt recupera il valore in corrispondenza di un determinato indice N-dimensionale dall'interno dell'oggetto indicizzato. Un indicizzatore di dimensioni N in cui N è il valore restituito da GetDimensionality deve essere supportato. Si noti che un oggetto può essere indicizzato in domini diversi in base a tipi diversi, ad esempio indicizzati tramite ordinali e stringhe. Se l'indice non è compreso nell'intervallo (o non è stato possibile accedere), il metodo restituirà un errore; Tuttavia, in questi casi, l'oggetto di output può comunque essere impostato su un oggetto error.

Sintassi

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

Parametri

contextObject

L'oggetto istanza (questo puntatore) che viene indicizzato viene passato qui.

indexerCount

Numero di dimensioni in cui l'oggetto viene indicizzato.

indexers

Matrice (ridimensionata in base all'indexerCount) degli indici che indicano dove accedere all'oggetto dell'istanza.

object

Il valore dell'elemento in corrispondenza degli indici specificati viene restituito qui. Se il metodo ha esito negativo, le informazioni sugli errori estese potrebbero essere restituite qui come oggetto errore.

metadata

I metadati facoltativi sull'elemento indicizzato possono essere restituiti qui.

Valore restituito

Questo metodo restituisce HRESULT che indica l'esito positivo o l'errore.

Commenti

Implementazione di esempio:

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

Requisiti

Requisito Valore
Intestazione dbgmodel.h

Vedi anche

Interfaccia IIndexableConcept