IKeyStore ::GetKey, méthode (dbgmodel.h)
La méthode GetKey est analogue à la méthode GetKey sur IModelObject. Elle retourne la valeur de la clé spécifiée s’il existe dans le magasin de clés ou dans le magasin parent du magasin de clés. Notez que si la valeur de la clé est un accesseur de propriété, la méthode GetValue ne sera pas appelée sur l’accesseur de propriété. Le IModelPropertyAccessor réel boxé dans un IModelObject sera retourné. Il est courant qu’un client appelle GetKeyValue pour cette raison.
Syntaxe
HRESULT GetKey(
PCWSTR key,
_COM_Errorptr_opt_ IModelObject **object,
IKeyStore **metadata
);
Paramètres
key
Nom de la clé pour obtenir une valeur pour
object
La valeur de la clé est retournée dans cet argument.
metadata
Le magasin de métadonnées associé à cette clé sera éventuellement retourné dans cet argument. Il n’existe aucune utilisation actuelle pour les métadonnées de deuxième niveau. Cet argument doit donc être spécifié comme null.
Valeur de retour
Cette méthode retourne HRESULT qui indique la réussite ou l’échec. Les valeurs de retour E_BOUNDS (ou E_NOT_SET dans certains cas) indiquent que la clé est introuvable.
Remarques
Exemple de code
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.
}
}
}
Exigences
Exigence | Valeur |
---|---|
d’en-tête | dbgmodel.h |