IDataModelManager::AcquireNamedModel 方法 (dbgmodel.h)

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

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

语法

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

参数

modelName

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

modelObject

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

返回值

此方法返回 HRESULT。

注解

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

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

示例代码

ComPtr<IDataModelManager> 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!
    }
}

要求

要求
Header dbgmodel.h

另请参阅

IDataModelManager 接口