Méthode IKeyStore ::GetKey (dbgmodel.h)
La méthode GetKey est analogue à la méthode GetKey sur IModelObject. Elle retourne la valeur de la clé spécifiée si elle existe dans le magasin de clés ou dans le magasin parent du magasin de clés. Notez que si la valeur de la clé est un accesseur de propriété, la méthode GetValue n’est pas appelée sur l’accesseur de propriété. L’IModelPropertyAccessor réel boxé dans un IModelObject sera retourné. Il est courant qu’un client appelle GetKeyValue pour cette raison.
Syntaxe
HRESULT GetKey(
PCWSTR key,
_COM_Errorptr_opt_ IModelObject **object,
IKeyStore **metadata
);
Paramètres
key
Nom de la clé pour laquelle obtenir une valeur pour
object
La valeur de la clé sera retournée dans cet argument.
metadata
Le magasin de métadonnées associé à cette clé sera éventuellement retourné dans cet argument. Il n’est pas utilisé actuellement pour les métadonnées de deuxième niveau. Cet argument doit donc généralement être spécifié comme null.
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> spObject; /* get an object */
ComPtr<IKeyStore> spMetadata; /* get a key store from spObject (say
returned from GetKeyValue) */
ComPtr<IModelObject> spRadixKey;
if (SUCCEEDED(spMetadata->GetKey(L"PreferredRadix", &spRadixKey, nullptr)))
{
// Since this is GetKey and not GetKeyValue, spRadixKey *MAY* be a
// property accessor. Check and fetch.
ModelObjectKind kind;
if (SUCCEEDED(spRadixKey->GetKind(&kind)))
{
if (kind == ObjectPropertyAccessor)
{
VARIANT vtProp;
if (SUCCEEDED(spRadixKey->GetIntrinsicValue(&vtProp)))
{
// There is a guarantee in-process that the IUnknown here
// is IModelPropertyAccessor because of the ObjectPropertyAccessor.
IModelPropertyAccessor *pProperty =
static_cast<IModelPropertyAccessor *>(vtProp.punkVal);
ComPtr<IModelObject> spRadix;
// It is important that the context object be the object where
// the metadata store CAME FROM. Hence the second argument
// of spObject.Get(). Note that if you use GetKeyValue on the store,
// this is automatically handled for you.
if (SUCCEEDEDED(pProperty->GetValue(L"PreferredRadix",
spObject.Get(),
&spRadix)))
{
// spRadix has the radix. Use GetIntrinsicValueAs to unbox.
}
VariantClear(&vtProp);
}
}
else
{
// spRadixKey has the radix. Use GetIntrinsicValueAs to unbox.
}
}
}
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | dbgmodel.h |