IKeyStore::GetKey-Methode (dbgmodel.h)
Die GetKey-Methode entspricht der GetKey-Methode auf IModelObject. Er gibt den Wert des angegebenen Schlüssels zurück, wenn er im Schlüsselspeicher oder im übergeordneten Schlüsselspeicher vorhanden ist. Beachten Sie, dass, wenn der Wert des Schlüssels ein Eigenschaftsaccessor ist, die GetValue-Methode nicht für den Eigenschaftenaccessor aufgerufen wird. Der tatsächliche IModelPropertyAccessor , der in ein IModelObject-Objekt geschachtelt ist, wird zurückgegeben. Es ist typisch, dass ein Client getKeyValue aus diesem Grund aufruft.
Syntax
HRESULT GetKey(
PCWSTR key,
_COM_Errorptr_opt_ IModelObject **object,
IKeyStore **metadata
);
Parameter
key
Der Name des Schlüssels, für den ein Wert abgerufen werden soll
object
Der Wert des Schlüssels wird in diesem Argument zurückgegeben.
metadata
Der diesem Schlüssel zugeordnete Metadatenspeicher wird in diesem Argument optional zurückgegeben. Es gibt keine verwendung für Metadaten der zweiten Ebene. Dieses Argument sollte daher in der Regel als NULL angegeben werden.
Rückgabewert
Diese Methode gibt HRESULT zurück, das den Erfolg oder Fehler angibt. Die Rückgabewerte E_BOUNDS (oder in einigen Fällen E_NOT_SET) deuten darauf hin, dass der Schlüssel nicht gefunden wurde.
Hinweise
Codebeispiel
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.
}
}
}
Anforderungen
Anforderung | Wert |
---|---|
Header | dbgmodel.h |