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


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

Метод GetKey получит значение (и метаданные, связанные с) заданным ключом по имени. Вместо этого большинство клиентов должны использовать метод GetKeyValue. Если ключ является методом доступа к свойствам, вызов этого метода вернет метод доступа к свойству (интерфейс IModelPropertyAccessor) в IModelObject. В отличие от GetKeyValue, этот метод не будет автоматически разрешать базовое значение ключа путем вызова метода GetValue. Эта ответственность является вызывающим.

Синтаксис

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

Параметры

key

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

object

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

metadata

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

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

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

Замечания

Пример кода

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

Требования

Требование Ценность
заголовка dbgmodel.h

См. также

интерфейс IModelObject