Método IDataModelManager::RegisterModelForTypeSignature (dbgmodel.h)

El método RegisterModelForTypeSignature es el método principal que un llamador utiliza para registrar un visualizador canónico para un tipo determinado (o conjunto de tipos). Un visualizador canónico es un modelo de datos que, en efecto, toma el control de la presentación de un tipo determinado (o conjunto de tipos). En lugar de la vista nativa o de idioma del tipo que se muestra en cualquier interfaz de usuario del depurador, se muestra la vista del tipo que presenta el modelo de datos registrado (junto con un medio de volver a la vista nativa o de idioma para un usuario que lo desee). La firma de tipo que se pasa a este método puede coincidir con varios tipos concretos. Si hay varias coincidencias para una instancia de tipo determinada, solo se devolverá la mejor coincidencia. Una firma de tipo se considera una mejor coincidencia que otra si se refiere más específicamente a un tipo concreto determinado. Como ejemplos:

A) std::pair<*, *>
B) std::pair<int, *>
C) std::pair<int, float>

Si las tres firmas de tipo anteriores (A, B y C) se registran y comprueban con un tipo concreto:

std::pair<int, float>

Las firmas alltype coinciden con esta instancia de tipo. El segundo es una coincidencia mejor que la primera porque int (el primer argumento de plantilla de B) es una coincidencia mejor que un carácter comodín (el primer argumento de plantilla de A). Del mismo modo, la tercera es una coincidencia mejor que la segunda (es una coincidencia total sin caracteres comodín).

El método RegisterModelForTypeSignature no permitirá registrar firmas de tipo duplicadas. Solo se puede registrar un modelo de datos como visualizador canónico para una firma de tipo determinada. Se producirá un error al intentar registrar la misma firma de tipo dos veces. Del mismo modo, el método RegisterModelForTypeSignature no permitirá firmas de tipo que puedan coincidir ambiguamente con cualquier instancia de tipo que se va a registrar. Por ejemplo:

D) std::pair<int, *>
E) std::pair<*, int>

Las dos firmas de tipo anteriores (D y E) no se pueden registrar. Para algunos tipos, es claro qué firma se aplica y es mejor. Por ejemplo,

std::pair<int, float>

Solo coincide con el primero de estos (D) ya que float e int no coinciden. Sin embargo, es completamente ambiguo al considerar lo siguiente:

std::pair<int, int>

Cualquiera de estas firmas es igualmente buena (ambos tienen una coincidencia concreta y una coincidencia de caracteres comodín). Estas firmas de tipo son ambiguas. Por lo tanto, se producirá un error en una llamada para registrar el segundo de ellos por este motivo.

Sintaxis

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

Parámetros

typeSignature

Firma de tipo que se está registrando. Cualquier objeto nativo o de lenguaje de un tipo concreto que coincida mejor con esta firma de tipo tendrá el modelo de datos proporcionado por el argumento dataModel asociado automáticamente.

dataModel

El modelo de datos que se va a convertir en el visualizador canónico para los tipos que coinciden con la firma de tipo especificada.

Valor devuelto

Este método devuelve HRESULT que indica éxito o error. Este método no podrá registrar firmas de tipo idénticas o ambiguas.

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->RegisterModelForTypeSignature(spTypeSignature.Get(),
                                                               spDataModel.Get()))
        {
            // Every instance matching MyType<*> will now have spDataModel 
            // attached as the parent.  Further, such parent is considered 
            // the canonical visualizer for all types matching MyType<*> since 
            // it was registered via RegisterModelForTypeSignature instead of
            // RegisterExtensionForTypeSignature.
        }
    }
}

Requisitos

Requisito Valor
Header dbgmodel.h

Consulte también

Interfaz IDataModelManager