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 |