IModelObject ::GetKey, méthode (dbgmodel.h)
La méthode GetKey obtient la valeur de (et les métadonnées associées à) une clé donnée par nom. La plupart des clients doivent utiliser la méthode GetKeyValue à la place. Si la clé est un accesseur de propriété, l’appel de cette méthode renvoie l’accesseur de propriété (une interface IModelPropertyAccessor ) boxé dans un IModelObject. Contrairement à GetKeyValue, cette méthode ne résout pas automatiquement la valeur sous-jacente de la clé en appelant la méthode GetValue. Cette responsabilité est celle de l’appelant.
Syntaxe
HRESULT GetKey(
PCWSTR key,
_COM_Errorptr_opt_ IModelObject **object,
IKeyStore **metadata
);
Paramètres
key
Nom de la clé pour laquelle obtenir une valeur.
object
La valeur de la clé sera retournée dans cet argument. Dans certains cas d’erreur, des informations d’erreur étendues peuvent être transmises dans cet argument, même si la méthode retourne un HRESULT défaillant.
metadata
Le magasin de métadonnées associé à cette clé sera éventuellement retourné dans cet argument.
Valeur retournée
Cette méthode retourne HRESULT qui indique la réussite ou l’échec. Les valeurs de retour E_BOUNDS (ou E_NOT_SET dans certains cas) indiquent que la clé est introuvable.
Remarques
Exemple de code
ComPtr<IModelObject> spProcess; /* get a process object */
ComPtr<IModelObject> spIdKey;
if (SUCCEEDED(spProcess->GetKey(L"Id", &spIdKey, nullptr)))
{
// Unlike GetKeyValue(), spIdKey may contain a value or it may be a
// *property* that needs to be fetched. Check!
ModelObjectKind kind;
if (SUCCEEDED(spIdKey->GetKind(&kind)))
{
if (kind == ObjectPropertyAccessor)
{
VARIANT vtProp;
if (SUCCEEDED(spIdKey->GetIntrinsicValue(&vtProp)))
{
// There is an *in-process* guarantee because of
// ObjectPropertyAccessor that the IUnknown is an IModelPropertyAccessor
IModelPropertyAccessor *pPropertyAccessor =
static_cast<IModelPropertyAccessor *>(vtProp.punkVal);
// Fetch the value underneath the property accessor. GetKeyValue
// would have done this for us.
ComPtr<IModelObject> spId;
if (SUCCEEDED(pPropertyAccessor->GetValue(L"Id", spProcess.Get(), &spId)))
{
// spId now contains the value of the id. Unbox with GetIntrinsicValueAs.
}
VariantClear(&vtProp);
}
}
else
{
// spIdKey contains the value. Unbox with GetIntrinsicValueAs.
}
}
}
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | dbgmodel.h |