次の方法で共有


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

こちらもご覧ください

IKeyStore インターフェイス