IModelObject::AddParentModel 메서드(dbgmodel.h)
AddParentModel 메서드는 지정된 개체에 새 부모 모델을 추가합니다. 이러한 모델은 검색 체인의 끝부분(재정의 인수는 false로 지정됨) 또는 검색 체인의 맨 앞에 추가될 수 있습니다(재정의 인수는 true로 지정됨). 또한 각 부모 모델은 필요에 따라 지정된 부모(또는 부모 계층 구조의 모든 사용자)에 대한 속성 또는 개념에 대한 컨텍스트(이 포인터 의미 체계)를 조정할 수 있습니다. 컨텍스트 조정은 거의 사용되지 않지만 개체 포함, 네임스페이스 생성 등과 같은 몇 가지 강력한 개념을 허용합니다.
부모 모델에 컨텍스트 조정이 있는 경우 핵심 데이터 모델은 호출자를 대신하여 이 조정을 자동으로 수행합니다. 실제로 newContext에 대한 컨텍스트 조정자가 있는 부모 모델 부모가 있는 개체 instance 의 호출입니다.
instance->GetKeyValue("someKey", &pValue, nullptr);
는 context/this 포인터를 instance newContext로 변경한 후 일부Key의 GetValue 메서드를 호출합니다.
다른 개체에 부모 모델로 추가되는 모든 IModelObject 는 IDataModelConcept 개념을 개별적으로 지원해야 합니다. 이 개념을 구현하지 못하면 AddParentModel 메서드 호출이 실패할 수 있습니다.
구문
HRESULT AddParentModel(
IModelObject *model,
IModelObject *contextObject,
bool override
);
매개 변수
model
지정된 개체의 부모 모델 체인에 추가될 IModelObject 입니다. 이 IModelObject 는 IDataModelConcept 개념을 개별적으로 지원해야 합니다.
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 |