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;
}
要求
| 要求 | 价值 |
|---|---|
| 标头 | dbgmodel.h |