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 |