Метод 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 |