IModelObject::AddParentModel 메서드(dbgmodel.h)

AddParentModel 메서드는 지정된 개체에 새 부모 모델을 추가합니다. 이러한 모델은 검색 체인의 끝부분(재정의 인수는 false로 지정됨) 또는 검색 체인의 맨 앞에 추가될 수 있습니다(재정의 인수는 true로 지정됨). 또한 각 부모 모델은 필요에 따라 지정된 부모(또는 부모 계층 구조의 모든 사용자)에 대한 속성 또는 개념에 대한 컨텍스트(이 포인터 의미 체계)를 조정할 수 있습니다. 컨텍스트 조정은 거의 사용되지 않지만 개체 포함, 네임스페이스 생성 등과 같은 몇 가지 강력한 개념을 허용합니다.

부모 모델에 컨텍스트 조정이 있는 경우 핵심 데이터 모델은 호출자를 대신하여 이 조정을 자동으로 수행합니다. 실제로 newContext에 대한 컨텍스트 조정자가 있는 부모 모델 부모가 있는 개체 instance 의 호출입니다.

instance->GetKeyValue("someKey", &pValue, nullptr);

는 context/this 포인터를 instance newContext로 변경한 후 일부Key의 GetValue 메서드를 호출합니다.

다른 개체에 부모 모델로 추가되는 모든 IModelObjectIDataModelConcept 개념을 개별적으로 지원해야 합니다. 이 개념을 구현하지 못하면 AddParentModel 메서드 호출이 실패할 수 있습니다.

구문

HRESULT AddParentModel(
  IModelObject *model,
  IModelObject *contextObject,
  bool         override
);

매개 변수

model

지정된 개체의 부모 모델 체인에 추가될 IModelObject 입니다. 이 IModelObjectIDataModelConcept 개념을 개별적으로 지원해야 합니다.

contextObject

데이터 모델에 연결된 컨텍스트 조정이 있는 경우 조정된 컨텍스트(또는 조정된 컨텍스트를 반환하는 속성 접근자)가 여기에 전달될 수 있습니다.

override

모델 인수로 지정된 부모 모델이 부모 모델의 선형 체인의 전면 또는 끝에 배치되는지 여부를 나타냅니다. false 값(일반적으로 제공됨)은 체인의 끝을 나타냅니다. true 값은 체인의 앞면을 나타냅니다.

반환 값

이 메서드는 성공 또는 실패를 나타내는 HRESULT를 반환합니다.

설명

** 코드 샘플**



ComPtr<IDataModelManager> spManager; /* get the data model manager */
ComPtr<IModelObject> spObject;       /* get an object */

// A data model *MUST* implement IDataModelConcept.  Create an implementation of this and a string conversion.
class MyDataModel :
    public Microsoft::WRL::RuntimeClass<
        Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>,
        IDataModelConcept,
        IStringDisplayableConcept
        >
{
public:
 
    IFACEMETHOD(InitializeObject)(_In_ IModelObject * /*pModelObject*/, 
                                  _In_opt_ IDebugHostTypeSignature * /*pMatchingSignature*/,
                                  _In_opt_ IDebugHostSymbolEnumerator * /*pWildcardMatches*/)
    {
        return S_OK;
    }

    IFACEMETHOD(GetName)(_Out_ BSTR *pModelName)
    { 
        return E_NOTIMPL;
    }

    IFACEMETHOD(ToDisplayString)(_In_ IModelObject * /*pContextObject*/, 
                                 _In_opt_ IKeyStore * /*pMetadata */, 
                                 _Out_ BSTR *pDisplayString)
    {
        *pDisplayString = SysAllocString(L"Hello World");
        return *pDisplayString == nullptr ? E_OUTOFMEMORY : S_OK;
    }
};

// Create the data model, an object for it, set concepts, and add it as a parent to spObject.
ComPtr<MyDataModel> spDataModel = Microsoft::WRL::Make<MyDataModel>();
ComPtr<IModelObject> spDataModelObject;
if (spDataModel != nullptr &&
    SUCCEEDED(spManager->CreateDataModelObject(spDataModel.Get(), &spDataModelObject)) &&
    SUCCEEDED(spDataModelObject->SetConcept(__uuidof(IStringDisplayableConcept),
                                            static_cast<IStringDisplayableConcept *>
                                                (spDataModel.Get()), 
                                            nullptr)))
{
    if (SUCCEEDED(spObject->AddParentModel(spDataModelObject.Get(), nullptr, false)))
    {
        // spObject has been *EXTENDED* to have a display string.  It has a parent model 
        // which has that concept.  That extension (and whatever else was added 
        // on spDataModelObject) can be removed with a single RemoveParentModel call.
    }
}

요구 사항

요구 사항
헤더 dbgmodel.h

추가 정보

IModelObject 인터페이스