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

Интерфейс IDataModelManager2

Требования

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