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 |