Поделиться через


Метод 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!
    }
}

Требования

Требование Значение
Заголовок dbgmodel.h

См. также раздел

Интерфейс IDataModelManager