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


Метод IDataModelManager::RegisterExtensionForTypeSignature (dbgmodel.h)

Метод RegisterExtensionForTypeSignature аналогичен методу RegisterModelForTypeSignature с одним ключевым отличием. Модель данных, передаваемая этому методу, не является каноническим визуализатором для любого типа, и она не будет принимать на себя отображение собственного или языкового представления этого типа. Модель данных, передаваемая этому методу, будет автоматически добавлена в качестве родительской к любому конкретному типу, который соответствует предоставленной сигнатуре типа.

В отличие от метода RegisterModelForTypeSignature, не существует ограничений на идентичные или неоднозначные сигнатуры типов, зарегистрированные в качестве расширений для заданного типа (или набора типов). Каждое расширение, сигнатура типа которого соответствует заданному конкретному экземпляру типа, приведет к автоматическому присоединению модели данных, зарегистрированной с помощью этого метода, к вновь созданным объектам в качестве родительских моделей. Это, по сути, позволяет произвольному количеству клиентов расширить тип (или набор типов) с помощью новых полей или функций.

Синтаксис

HRESULT RegisterExtensionForTypeSignature(
  IDebugHostTypeSignature *typeSignature,
  IModelObject            *dataModel
);

Параметры

typeSignature

Сигнатура типа, для которой указанная модель данных будет зарегистрирована в качестве расширения. Каждый объект на языке или на собственном языке, конкретный тип которого соответствует этой сигнатуре, будет автоматически присоединена к данной модели данных в качестве родительской модели.

dataModel

Модель данных, которая будет автоматически добавлена в качестве родительской модели к каждому объекту на родном языке с конкретным типом, соответствующим предоставленной сигнатуре типа.

Возвращаемое значение

Этот метод возвращает HRESULT, указывающее на успех или сбой.

Комментарии

Образец кода

ComPtr<IDataModelManager> spManager; /* get the data model manager */
ComPtr<IDebugHost> spHost;           /* get the debug host */

ComPtr<IModelObject> spDataModel;    /* create a data model (see 
                                        CreateDataModelObject) */

ComPtr<IDebugHostSymbols> spSym;
if (SUCCEEDED(spHost.As(&spSym)))
{
    // Create a signature to match MyType<*>
    ComPtr<IDebugHostTypeSignature> spTypeSignature;
    if (SUCCEEDED(spSym->CreateTypeSignature(L"MyType<*>", nullptr, &spTypeSignature)))
    {
        // Register the model for std::vector<*>
        if (SUCCEEDED(spManager->RegisterExtensionForTypeSignature(
            spTypeSignature.Get(), 
            spDataModel.Get())
            )
        {
            // Every instance matching MyType<*> will now have spDataModel 
            // attached as the parent.  This data model is considered an "extension"
            // (adding properties).  It will not be counted as a visualizer and 
            // will not "take over" the display of the type
        }
    }
}

Требования

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

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

Интерфейс IDataModelManager