Compartir a través de


Método IModelObject::GetKey (dbgmodel.h)

El método GetKey obtendrá el valor de (y los metadatos asociados a) una clave determinada por nombre. La mayoría de los clientes deben usar el método GetKeyValue en su lugar. Si la clave es un descriptor de acceso de propiedad, al llamar a este método se devolverá el descriptor de acceso de propiedad (una interfaz IModelPropertyAccessor ) boxing en un IModelObject. A diferencia de GetKeyValue, este método no resolverá automáticamente el valor subyacente de la clave llamando al método GetValue. Esa responsabilidad es la del autor de la llamada.

Sintaxis

HRESULT GetKey(
  PCWSTR                          key,
  _COM_Errorptr_opt_ IModelObject **object,
  IKeyStore                       **metadata
);

Parámetros

key

Nombre de la clave para la que se va a obtener un valor.

object

El valor de la clave se devolverá en este argumento. En algunos casos de error, la información de error extendida se puede pasar en este argumento aunque el método devuelva un HRESULT con errores.

metadata

El almacén de metadatos asociado a esta clave se devolverá opcionalmente en este argumento.

Valor devuelto

Este método devuelve HRESULT que indica éxito o error. Los valores devueltos E_BOUNDS (o E_NOT_SET en algunos casos) indican que no se encontró la clave.

Comentarios

Ejemplo de código

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.
        }
    }
}

Requisitos

Requisito Valor
Header dbgmodel.h

Consulte también

Interfaz IModelObject