IKeyStore::GetKey メソッド (dbgmodel.h)
GetKey メソッドは、 IModelObject の GetKey メソッドに似ています。 キー ストアまたはキー ストアの親ストアに存在する場合は、指定したキーの値が返されます。 キーの値がプロパティ アクセサーの場合、GetValue メソッドはプロパティ アクセサーでは呼び出されないことに注意してください。 IModelObject にボックス化された実際の IModelPropertyAccessor が返されます。 この理由から、クライアントが GetKeyValue を呼び出すのが一般的です。
構文
HRESULT GetKey(
PCWSTR key,
_COM_Errorptr_opt_ IModelObject **object,
IKeyStore **metadata
);
パラメーター
key
値を取得するキーの名前
object
この引数では、キーの値が返されます。
metadata
このキーに関連付けられているメタデータ ストアは、必要に応じてこの引数で返されます。 第 2 レベルのメタデータには現在使用されません。 したがって、通常、この引数は null として指定する必要があります。
戻り値
このメソッドは、成功または失敗を示す HRESULT を返します。 戻り値E_BOUNDS (場合によってはE_NOT_SET) は、キーが見つからなかったことを示します。
注釈
コード サンプル
ComPtr<IModelObject> spObject; /* get an object */
ComPtr<IKeyStore> spMetadata; /* get a key store from spObject (say
returned from GetKeyValue) */
ComPtr<IModelObject> spRadixKey;
if (SUCCEEDED(spMetadata->GetKey(L"PreferredRadix", &spRadixKey, nullptr)))
{
// Since this is GetKey and not GetKeyValue, spRadixKey *MAY* be a
// property accessor. Check and fetch.
ModelObjectKind kind;
if (SUCCEEDED(spRadixKey->GetKind(&kind)))
{
if (kind == ObjectPropertyAccessor)
{
VARIANT vtProp;
if (SUCCEEDED(spRadixKey->GetIntrinsicValue(&vtProp)))
{
// There is a guarantee in-process that the IUnknown here
// is IModelPropertyAccessor because of the ObjectPropertyAccessor.
IModelPropertyAccessor *pProperty =
static_cast<IModelPropertyAccessor *>(vtProp.punkVal);
ComPtr<IModelObject> spRadix;
// It is important that the context object be the object where
// the metadata store CAME FROM. Hence the second argument
// of spObject.Get(). Note that if you use GetKeyValue on the store,
// this is automatically handled for you.
if (SUCCEEDEDED(pProperty->GetValue(L"PreferredRadix",
spObject.Get(),
&spRadix)))
{
// spRadix has the radix. Use GetIntrinsicValueAs to unbox.
}
VariantClear(&vtProp);
}
}
else
{
// spRadixKey has the radix. Use GetIntrinsicValueAs to unbox.
}
}
}
要件
要件 | 値 |
---|---|
Header | dbgmodel.h |