다음을 통해 공유


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

이 키와 연결된 메타데이터 저장소는 필요에 따라 이 인수에 반환됩니다. 두 번째 수준 메타데이터에는 현재 사용되지 않습니다. 따라서 이 인수는 일반적으로 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

추가 정보

IKeyStore 인터페이스