Método IDataModelManager2::RegisterExtensionForTypeSignature (dbgmodel.h)
El método RegisterExtensionForTypeSignature es similar al método RegisterModelForTypeSignature con una diferencia clave. El modelo de datos que se pasa a este método no es el visualizador canónico de ningún tipo y no se ocupará de la presentación de la vista nativa o de idioma de ese tipo. El modelo de datos que se pasa a este método se agregará automáticamente como elemento primario a cualquier tipo concreto que coincida con la firma de tipo proporcionada.
A diferencia del método RegisterModelForTypeSignature, no hay ningún límite en firmas de tipo idénticas o ambiguas que se registran como extensiones en un tipo determinado (o conjunto de tipos). Cada extensión cuya firma de tipo coincide con una instancia de tipo concreta determinada hará que el modelo de datos registrado a través de este método se asocie automáticamente a los objetos recién creados como modelos primarios. Esto, en efecto, permite que un número arbitrario de clientes extienda un tipo (o conjunto de tipos) con nuevos campos o funcionalidades.
Sintaxis
HRESULT RegisterExtensionForTypeSignature(
IDebugHostTypeSignature *typeSignature,
IModelObject *dataModel
);
Parámetros
typeSignature
Firma de tipo con la que se registrará el modelo de datos proporcionado como una extensión. Cada objeto nativo o de lenguaje cuyo tipo concreto coincida con esta firma tendrá el modelo de datos especificado adjunto como modelo primario automáticamente.
dataModel
Modelo de datos que se agregará automáticamente como modelo primario a cada objeto nativo o de lenguaje con un tipo concreto que coincida con la firma de tipo proporcionada.
Valor devuelto
Este método devuelve HRESULT que indica éxito o error.
Comentarios
Código de ejemplo
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
}
}
}
Requisitos
Requisito | Valor |
---|---|
Header | dbgmodel.h |