IIndexableConcept ::GetAt, méthode (dbgmodel.h)
La méthode GetAt récupère la valeur à un index ndimensionnel particulier à partir de l’objet indexé. Indexeur de dimensions N où N est la valeur retournée par GetDimensionality doit être prise en charge. Notez qu’un objet peut être indexable dans différents domaines par différents types (par exemple, indexable via des ordinals et des chaînes). Si l’index est hors plage (ou n’a pas pu être accessible), la méthode retourne un échec ; Toutefois, dans ce cas, l’objet de sortie peut toujours être défini sur un objet d’erreur.
Syntaxe
HRESULT GetAt(
IModelObject *contextObject,
ULONG64 indexerCount,
IModelObject **indexers,
_COM_Errorptr_ IModelObject **object,
IKeyStore **metadata
);
Paramètres
contextObject
L’objet d’instance (ce pointeur) qui est indexé est transmis ici.
indexerCount
Nombre de dimensions dans laquelle l’objet est indexé.
indexers
Tableau (dimensionné en fonction de l’indexerCount) d’index indiquant où se trouve l’objet d’instance à accéder.
object
La valeur de l’élément aux index spécifiés est retournée ici. Si la méthode échoue, les informations d’erreur étendues peuvent être retournées ici en tant qu’objet d’erreur.
metadata
Les métadonnées facultatives relatives à l’élément indexé peuvent être retournées ici.
Valeur de retour
Cette méthode retourne HRESULT qui indique la réussite ou l’échec.
Remarques
exemple d’implémentation :
// 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;
}
Exigences
Exigence | Valeur |
---|---|
d’en-tête | dbgmodel.h |