Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Метод 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 |