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 em caixa em um IModelObject será retornado. É típico 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 neste argumento.
metadata
O repositório de metadados associado a essa chave será retornado opcionalmente nesse argumento. Não há nenhum uso presente para metadados de segundo nível. Esse argumento deve, portanto, normalmente ser especificado como nulo.
Valor de retorno
Esse método retorna HRESULT que indica êxito ou falha. Os valores retornados E_BOUNDS (ou E_NOT_SET em alguns casos) indica que a chave não pôde ser encontrada.
Observações
de 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 |