Compartilhar via


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

Confira também

Interface IKeyStore