Метод IIndexableConcept::GetAt (dbgmodel.h)
Метод GetAt извлекает значение по определенному N-мерному индексу из индексированного объекта. Должен поддерживаться индексатор N-измерений, где N — это значение, возвращаемое из GetDimensionality. Обратите внимание, что объект может индексироваться в разных доменах с помощью разных типов (например, индексируемый как по порядковым номерам, так и по строкам). Если индекс выходит за пределы диапазона (или не удается получить доступ), метод вернет ошибку; Однако в таких случаях выходной объект по-прежнему может быть задан как объект error.
Синтаксис
HRESULT GetAt(
IModelObject *contextObject,
ULONG64 indexerCount,
IModelObject **indexers,
_COM_Errorptr_ IModelObject **object,
IKeyStore **metadata
);
Параметры
contextObject
Сюда передается объект экземпляра (этот указатель), который индексируется.
indexerCount
Количество измерений, в которых индексируется объект.
indexers
Массив (размер в соответствии с indexerCount) индексов, указывающий, где внутри объекта экземпляра требуется получить доступ.
object
Здесь возвращается значение элемента по указанным индексам. Если метод завершается сбоем, сюда могут возвращаться расширенные сведения об ошибке в виде объекта ошибки.
metadata
Здесь могут быть возвращены необязательные метаданные индексированного элемента.
Возвращаемое значение
Этот метод возвращает HRESULT, который указывает на успех или сбой.
Комментарии
Пример реализации:
// 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;
}
Требования
Требование | Значение |
---|---|
Заголовок | dbgmodel.h |