IDataModelManager4::AcquireNamedModel 方法 (dbgmodel.h)

AcquireNamedModel 查找已知的模型名称,并返回该名称注册的数据模型。 请注意,如果没有按提供的名称注册的模型,则会创建存根并将其返回到调用方。

在注册时,添加到存根的任何内容都将添加到真实对象。

语法

HRESULT AcquireNamedModel(
  PCWSTR       modelName,
  IModelObject **modelObject
);

参数

modelName

要查找已注册数据模型的名称。

modelObject

此处将返回在 modelName 参数赋予的名称下注册的数据模型。 如果未注册此类数据模型,则会创建存根对象,在 modelName 参数给出的名称下临时注册,并在此处返回。 如果发生这种情况,则通过对 RegisterNamedModel 方法的调用注册实际对象时,对存根对象所做的更改实际上已移至实际数据模型。

返回值

此方法返回 HRESULT。

言论

希望扩展在给定名称下注册的数据模型的调用方调用 AcquireNamedModel 方法,以便检索要扩展的数据模型的对象。 此方法将返回通过之前调用 RegisterNamedModel 方法注册的任何数据模型。

作为 AcquireNamedModel 方法的主要用途是扩展模型,如果尚未在给定名称下注册模型,则此方法具有特殊行为。 如果尚未在给定名称下注册模型,则会创建存根对象,暂时在给定名称下注册,并返回到调用方。 通过调用 RegisterNamedModel 方法注册实际数据模型时,对存根对象所做的任何更改实际上都对实际模型进行了。 这会从相互扩展的组件中删除许多加载顺序依赖项问题。

示例代码

ComPtr<IDataModelManager4> spManager;    /* get the data model manager */
ComPtr<IModelObject> spExtensionModel;  /* create a data model object you want 
                                           to use as an extension (see
                                           CreateDataModelObject) */

// Get the process model so we can extend it
ComPtr<IModelObject> spProcessModel;
if (SUCCEEDED(spManager->AcquireNamedModel(L"Debugger.Models.Process", 
                                           &spProcessModel)))
{
    // We have the process model and can extend it.  Even if the name we queried 
    // for is *NOT* yet registered, we can extend what gets returned (a stub)
    // and the extensions on it will be moved to the real object 
    // once RegisterNamedModel() is called.
    if (SUCCEEDED(spProcessModel->AddParentModel(spExtensionModel.Get(), 
                                                 nullptr, 
                                                 false)))
    {
        // We have successfully extended the debugger's concept of a 
        // process with whatever we have in spExtensionModel!
    }
}

要求

要求 价值
标头 dbgmodel.h

另请参阅

IDataModelManager4 接口