次の方法で共有


IModelObject::GetKey メソッド (dbgmodel.h)

GetKey メソッドは、指定されたキーの値 (およびに関連付けられているメタデータ) を名前で取得します。 ほとんどのクライアントでは、代わりに GetKeyValue メソッドを使用する必要があります。 キーがプロパティ アクセサーの場合、このメソッドを呼び出すと、IModelObject にボックス化されたプロパティ アクセサー (IModelPropertyAccessor インターフェイス) が返されます。 GetKeyValue とは異なり、このメソッドは GetValue メソッドを呼び出すことで、キーの基になる値を自動的に解決しません。 その責任は呼び出し元の責任です。

構文

HRESULT GetKey(
  PCWSTR                          key,
  _COM_Errorptr_opt_ IModelObject **object,
  IKeyStore                       **metadata
);

パラメーター

key

値を取得するキーの名前。

object

キーの値は、この引数で返されます。 エラーの場合、メソッドから失敗した HRESULT が返される場合でも、この引数で拡張エラー情報が渡されることがあります。

metadata

このキーに関連付けられているメタデータ ストアは、必要に応じてこの引数で返されます。

戻り値

このメソッドは、成功または失敗を示す HRESULT を返します。 戻り値E_BOUNDS (または場合によってはE_NOT_SET) は、キーが見つからなかったことを示します。

注釈

コード サンプル

ComPtr<IModelObject> spProcess; /* get a process object */

ComPtr<IModelObject> spIdKey;
if (SUCCEEDED(spProcess->GetKey(L"Id", &spIdKey, nullptr)))
{
    // Unlike GetKeyValue(), spIdKey may contain a value or it may be a 
    // *property* that needs to be fetched.  Check!
    ModelObjectKind kind;
    if (SUCCEEDED(spIdKey->GetKind(&kind)))
    {
        if (kind == ObjectPropertyAccessor)
        {
            VARIANT vtProp; 
            if (SUCCEEDED(spIdKey->GetIntrinsicValue(&vtProp)))
            {
                // There is an *in-process* guarantee because of 
                // ObjectPropertyAccessor that the IUnknown is an IModelPropertyAccessor
                IModelPropertyAccessor *pPropertyAccessor = 
                    static_cast<IModelPropertyAccessor *>(vtProp.punkVal);

                // Fetch the value underneath the property accessor.  GetKeyValue 
                // would have done this for us.
                ComPtr<IModelObject> spId;
                if (SUCCEEDED(pPropertyAccessor->GetValue(L"Id", spProcess.Get(), &spId)))
                {
                    // spId now contains the value of the id.  Unbox with GetIntrinsicValueAs.
                }

                VariantClear(&vtProp);
            }
        }
        else
        {
            // spIdKey contains the value.  Unbox with GetIntrinsicValueAs.
        }
    }
}

要件

要件
Header dbgmodel.h

こちらもご覧ください

IModelObject インターフェイス