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 |