Compartir a través de


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
        }
    }
}

Interfaz IDataModelManager2

Requisitos

Requisito Valor
Header dbgmodel.h