Partager via


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

Voir aussi

Interface IKeyStore