Método IKeyStore::GetKey (dbgmodel.h)
O método GetKey é análogo ao método GetKey em IModelObject. Ele retornará o valor da chave especificada se ela existir no repositório de chaves ou no repositório pai do repositório de chaves. Observe que, se o valor da chave for um acessador de propriedade, o método GetValue não será chamado no acessador de propriedade. O IModelPropertyAccessor real encaixado em um IModelObject será retornado. É comum que um cliente chame GetKeyValue por esse motivo.
Sintaxe
HRESULT GetKey(
PCWSTR key,
_COM_Errorptr_opt_ IModelObject **object,
IKeyStore **metadata
);
Parâmetros
key
O nome da chave para a qual obter um valor
object
O valor da chave será retornado nesse argumento.
metadata
O repositório de metadados associado a essa chave será retornado opcionalmente nesse argumento. Não há uso presente para metadados de segundo nível. Portanto, esse argumento normalmente deve ser especificado como nulo.
Retornar valor
Esse método retorna HRESULT que indica êxito ou falha. Os valores retornados E_BOUNDS (ou E_NOT_SET em alguns casos) indicam que a chave não pôde ser encontrada.
Comentários
Exemplo de código
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.
}
}
}
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | dbgmodel.h |