iModelObject::AddParentModel 方法 (dbgmodel.h)

AddParentModel 方法将新的父模型添加到给定对象。 (override 参数指定为 false) 或搜索链的前面 (替代参数指定为 true) ,可以在搜索链的末尾添加此类模型。 此外,每个父模型可以选择性地调整上下文 (此指针) 的语义上给定父 (或其父层次结构) 的任何属性或概念。 上下文调整很少使用,但允许一些强大的概念,如对象嵌入、构造命名空间等...

当父模型具有上下文调整时,核心数据模型将自动代表调用方执行此调整。 实际上,对于父模型父级具有 newContext 上下文调整器的对象实例,调用

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

在调用 someKey 的 GetValue 方法之前,将最终将 context/this 指针从 实例更改为 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.
    }
}

要求

要求
Header dbgmodel.h

另请参阅

IModelObject 接口