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

Weitere Informationen

IKeyStore-Schnittstelle