IModelObject::AddParentModel 方法 (dbgmodel.h)
AddParentModel 方法向给定对象添加新的父模型。 此类模型可以在搜索链的末尾(替代参数指定为 false)或搜索链的前面添加(替代参数指定为 true)。 此外,每个父模型还可以根据需要调整给定父级上任何属性或概念(或其父层次结构中的任何人)的上下文(此指针的语义)。 上下文调整很少使用,但允许某些强大的概念,如对象嵌入、构造命名空间等...
当父模型具有上下文调整时,核心数据模型将代表调用方自动执行此调整。 实际上,对于具有父模型父级的对象实例,具有 newContext 的上下文调整器,调用
instance->GetKeyValue("someKey", &pValue, nullptr);
在调用 someKey 的 GetValue 方法之前,将上下文/此指针从实例更改为 newContext,因为访问通过上下文调整器传递的 someKey。
任何作为父模型添加到另一个对象的 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 |