IIndexableConcept::GetAt 方法 (dbgmodel.h)

GetAt 方法从索引对象中检索特定 N 维索引处的值。 必须支持 N 维索引器,其中 N 是从 GetDimensionality 返回的值。 请注意,对象可以按不同类型的 (在不同域中编制索引,例如:可通过序号和字符串) 编制索引。 如果索引不在 (范围内或无法) 访问,该方法将返回失败;但是,在这种情况下,输出对象仍可能设置为错误对象。

语法

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;
}

要求

要求
Header dbgmodel.h

另请参阅

IIndexableConcept 接口