次の方法で共有


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 インターフェイス