Поделиться через


Метод IKeyStore::GetKey (dbgmodel.h)

Метод GetKey аналогичен методу GetKey в IModelObject. Он вернет значение указанного ключа, если он существует в хранилище ключей или родительском хранилище ключей. Обратите внимание, что если значение ключа является методом доступа свойства, метод GetValue не будет вызываться для метода доступа свойства. Возвращается фактический объект IModelPropertyAccessor , упакованный в IModelObject . По этой причине клиент обычно вызывает GetKeyValue.

Синтаксис

HRESULT GetKey(
  PCWSTR                          key,
  _COM_Errorptr_opt_ IModelObject **object,
  IKeyStore                       **metadata
);

Параметры

key

Имя ключа для получения значения

object

Значение ключа будет возвращено в этом аргументе.

metadata

При необходимости в этом аргументе будет возвращено хранилище метаданных, связанное с этим ключом. Метаданные второго уровня не используются. Поэтому этот аргумент обычно должен быть указан как null.

Возвращаемое значение

Этот метод возвращает HRESULT, указывающее на успех или сбой. Возвращаемые значения E_BOUNDS (или E_NOT_SET в некоторых случаях) указывают, что ключ не найден.

Комментарии

Образец кода

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.
        }
    }
}

Требования

Требование Значение
Заголовок dbgmodel.h

См. также раздел

Интерфейс IKeyStore