Freigeben über


IKeyStore::GetKey-Methode (dbgmodel.h)

Die GetKey-Methode ist analog zur GetKey-Methode für IModelObject. Er gibt den Wert des angegebenen Schlüssels zurück, wenn er im Schlüsselspeicher oder im übergeordneten Speicher des Schlüsselspeichers vorhanden ist. Beachten Sie, dass die GetValue-Methode nicht für den Eigenschaftenaccessor aufgerufen wird, wenn der Wert des Schlüssels ein Eigenschaftsaccessor ist. Die tatsächliche IModelPropertyAccessor in ein IModelObject- eingeschlossen wird, 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 optional in diesem Argument zurückgegeben. Für Metadaten der zweiten Ebene ist keine Verwendung vorhanden. Dieses Argument sollte daher in der Regel als NULL angegeben werden.

Rückgabewert

Diese Methode gibt HRESULT zurück, das Erfolg oder Fehler angibt. Die Rückgabewerte E_BOUNDS (oder E_NOT_SET in einigen Fällen) deuten darauf hin, dass der Schlüssel nicht gefunden wurde.

Bemerkungen

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

Siehe auch

IKeyStore-Schnittstelle