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