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 |