Freigeben über


IModelObject::GetKey-Methode (dbgmodel.h)

Die GetKey-Methode ruft den Wert (und die metadaten zugeordneten) eines bestimmten Schlüssels nach Name ab. Die meisten Clients sollten stattdessen die GetKeyValue-Methode verwenden. Wenn der Schlüssel ein Eigenschaftszugriffsor ist, gibt das Aufrufen dieser Methode den Eigenschaftszugriffsor (eine IModelPropertyAccessor-Schnittstelle ) zurück, die in einem IModelObject-Objekt eingeschlossen ist. Im Gegensatz zu GetKeyValue löst diese Methode nicht automatisch den zugrunde liegenden Wert des Schlüssels auf, indem die GetValue-Methode aufgerufen wird. Diese Verantwortung ist die des Anrufers.

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. In einigen Fehlerfällen können erweiterte Fehlerinformationen in diesem Argument übergeben werden, obwohl die Methode ein fehlerhaftes HRESULT zurückgibt.

metadata

Der diesem Schlüssel zugeordnete Metadatenspeicher wird in diesem Argument optional zurückgegeben.

Rückgabewert

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

Hinweise

Codebeispiel

ComPtr<IModelObject> spProcess; /* get a process object */

ComPtr<IModelObject> spIdKey;
if (SUCCEEDED(spProcess->GetKey(L"Id", &spIdKey, nullptr)))
{
    // Unlike GetKeyValue(), spIdKey may contain a value or it may be a 
    // *property* that needs to be fetched.  Check!
    ModelObjectKind kind;
    if (SUCCEEDED(spIdKey->GetKind(&kind)))
    {
        if (kind == ObjectPropertyAccessor)
        {
            VARIANT vtProp; 
            if (SUCCEEDED(spIdKey->GetIntrinsicValue(&vtProp)))
            {
                // There is an *in-process* guarantee because of 
                // ObjectPropertyAccessor that the IUnknown is an IModelPropertyAccessor
                IModelPropertyAccessor *pPropertyAccessor = 
                    static_cast<IModelPropertyAccessor *>(vtProp.punkVal);

                // Fetch the value underneath the property accessor.  GetKeyValue 
                // would have done this for us.
                ComPtr<IModelObject> spId;
                if (SUCCEEDED(pPropertyAccessor->GetValue(L"Id", spProcess.Get(), &spId)))
                {
                    // spId now contains the value of the id.  Unbox with GetIntrinsicValueAs.
                }

                VariantClear(&vtProp);
            }
        }
        else
        {
            // spIdKey contains the value.  Unbox with GetIntrinsicValueAs.
        }
    }
}

Anforderungen

Anforderung Wert
Header dbgmodel.h

Weitere Informationen

IModelObject-Schnittstelle