(dbgmodel.h) IKeyStore::GetKey 方法
GetKey 方法類似於 IModelObject 上的 GetKey 方法。 如果指定的金鑰存在於金鑰存放區或金鑰存放區的父存放區中,則會傳回指定索引鍵的值。 請注意,如果索引鍵的值是屬性存取子,則不會在屬性存取子上呼叫 GetValue 方法。 實際的 IModelPropertyAccessor Boxed 會傳回 IModelObject 。 用戶端通常會基於這個原因呼叫 GetKeyValue。
語法
HRESULT GetKey(
PCWSTR key,
_COM_Errorptr_opt_ IModelObject **object,
IKeyStore **metadata
);
參數
key
要取得值之索引鍵的名稱
object
索引鍵的值將會在此自變數中傳回。
metadata
與這個索引鍵相關聯的元數據存放區將會在此自變數中選擇性地傳回。 第二層元數據沒有現用。 因此,這個自變數通常應該指定為 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.
}
}
}
規格需求
需求 | 值 |
---|---|
標頭 | dbgmodel.h |