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 |