Método IIndexableConcept::GetAt (dbgmodel.h)
O método GetAt recupera o valor em um índice N dimensional específico de dentro do objeto indexado. Um indexador de N dimensões em que N é o valor retornado de GetDimensionality deve ter suporte. Observe que um objeto pode ser indexável em domínios diferentes por tipos diferentes (por exemplo: indexável por meio de ordinais e cadeias de caracteres). Se o índice estiver fora do intervalo (ou não puder ser acessado), o método retornará uma falha; no entanto, nesses casos, o objeto de saída ainda pode ser definido como um objeto de erro.
Sintaxe
HRESULT GetAt(
IModelObject *contextObject,
ULONG64 indexerCount,
IModelObject **indexers,
_COM_Errorptr_ IModelObject **object,
IKeyStore **metadata
);
Parâmetros
contextObject
O objeto de instância (este ponteiro) que está sendo indexado é passado aqui.
indexerCount
O número de dimensões em que o objeto está sendo indexado.
indexers
Uma matriz (dimensionada de acordo com indexerCount) de índices que indicam onde dentro do objeto de instância para acessar.
object
O valor do elemento nos índices especificados é retornado aqui. Se o método falhar, as informações de erro estendidas poderão ser retornadas aqui como um objeto de erro.
metadata
Metadados opcionais sobre o elemento indexado podem ser retornados aqui.
Retornar valor
Esse método retorna HRESULT que indica êxito ou falha.
Comentários
Implementação de exemplo:
// 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 |
---|---|
Cabeçalho | dbgmodel.h |