IModelObject::GetKey メソッド (dbgmodel.h)
GetKey メソッドは、指定されたキーの値 (およびに関連付けられているメタデータ) を名前で取得します。 ほとんどのクライアントでは、代わりに GetKeyValue メソッドを使用する必要があります。 キーがプロパティ アクセサーの場合、このメソッドを呼び出すと、IModelObject にボックス化されたプロパティ アクセサー (IModelPropertyAccessor インターフェイス) が返されます。 GetKeyValue とは異なり、このメソッドは GetValue メソッドを呼び出すことで、キーの基になる値を自動的に解決しません。 その責任は呼び出し元の責任です。
構文
HRESULT GetKey(
PCWSTR key,
_COM_Errorptr_opt_ IModelObject **object,
IKeyStore **metadata
);
パラメーター
key
値を取得するキーの名前。
object
キーの値は、この引数で返されます。 エラーの場合、メソッドから失敗した HRESULT が返される場合でも、この引数で拡張エラー情報が渡されることがあります。
metadata
このキーに関連付けられているメタデータ ストアは、必要に応じてこの引数で返されます。
戻り値
このメソッドは、成功または失敗を示す HRESULT を返します。 戻り値E_BOUNDS (または場合によってはE_NOT_SET) は、キーが見つからなかったことを示します。
注釈
コード サンプル
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.
}
}
}
要件
要件 | 値 |
---|---|
Header | dbgmodel.h |