Compartir a través de


Método IDataModelConcept::InitializeObject (dbgmodel.h)

Un modelo de datos se puede registrar como visualizador canónico o como una extensión para un tipo nativo determinado a través de los métodos RegisterModelForTypeSignature o RegisterExtensionForTypeSignature del administrador de modelos de datos. Cuando se registra un modelo a través de cualquiera de estos métodos, el modelo de datos se adjunta automáticamente como modelo primario a cualquier objeto nativo cuyo tipo coincida con la firma pasada en el registro. En el punto en el que se realiza automáticamente ese archivo adjunto, se llama al método InitializeObject en el modelo de datos. Se pasa el objeto de instancia, la firma de tipo que provocó los datos adjuntos y un enumerador que genera las instancias de tipo (en orden lineal) que coinciden con los caracteres comodín de la firma de tipo. La implementación del modelo de datos puede usar esta llamada al método para inicializar las memorias caché que requiera.

Sintaxis

HRESULT InitializeObject(
  IModelObject               *modelObject,
  IDebugHostTypeSignature    *matchingTypeSignature,
  IDebugHostSymbolEnumerator *wildcardMatches
);

Parámetros

modelObject

Objeto de instancia que se está inicializando.

matchingTypeSignature

La firma de tipo con la que coincide el tipo nativo de modelObject que provocó los datos adjuntos del modelo de datos.

wildcardMatches

Si la firma de tipo coincidente incluye caracteres comodín, este argumento contendrá un enumerador que enumerará la coincidencia de cada carácter comodín. Normalmente, cada IDebugHostSymbol enumerado aquí es un IDebugHostType. Es decir, no, sin embargo, un requisito. Los argumentos de plantilla que no son de tipo (entre otras cosas) pueden coincidir con caracteres comodín y pueden producir símbolos como IDebugHostConstant.

Valor devuelto

Este método devuelve HRESULT que indica éxito o error. Si se produce un error en este método, se impedirá la construcción de objetos de la instancia.

Observaciones

Tenga en cuenta que una implementación de modelo de datos determinada no puede suponer que la llamada InitializeObject se realizará para cada objeto al que se adjunta el modelo de datos. Como el modelo de datos es un sistema completamente dinámico, es totalmente posible que un autor de la llamada adquiera directamente un modelo (a través de, por ejemplo, el método GetParentModel en IModelObject) y adjuntarlo manualmente. En tal circunstancia, no se habrá realizado la llamada a InitializeObject y la implementación debe estar preparada para hacerlo. La llamada a este método es una optimización para permitir que las implementaciones costosas se llene previamente y inicialicen las memorias caché de requisitos.

Ejemplo de implementación de

Tenga en cuenta que un cliente nunca llamará a esta interfaz.

//
// InitializeObject is an implementation of the interface method on some 
// class representing a data model.  Consider that the class has a GetObject() method
// which returns the IModelObject for the data model
//
// Let's also imagine that this registered for the type signature "std::vector<*>"
//
IFACEMETHOD(InitializeObject)(_In_ IModelObject *pContextObject, _In_ IDebugHostTypeSignature *pTypeSignature, _In_ IDebugHostSymbolEnumerator *pWildcardMatches)
{
    HRESULT hr = S_OK;

    // The minimal implementation is "return S_OK;"
    // Typically, this is used to fill cache information.  Imagine we have a 
    // cache in the context data.
    ComPtr<IUnknown> spCtxData;
    hr = pContextObject->GetContextForDataModel(GetObject(), &spCtxData));
    if (SUCCEEDED(hr))
    {
        CacheData *pCacheData = static_cast<CacheData *>(spCtxData.Get());

        // Find the instance type.  This is the template argument(s) which 
        // matched the * in 'std::vector<*>'
        ComPtr<IDebugHostSymbol> spFirstMatch;
        hr = pWildcardMatches->GetNext(&spFirstMatch));
        if (SUCCEEDED(hr))
        {
            SymnbolKind sk;
            ComPtr<IDebugHostType> spFirstType;
            if (SUCCEEDED(hr = spFirstMatch->GetSymbolKind(&sk)) && sk == SymbolType &&
                SUCCEEDED(hr = spFirstMatch.As(&spFirstType))))
            {
                pCacheData->SetInstanceType(spFirstType.Get()));
            }
        }
    }

    return hr;
}

Requisitos

Requisito Valor
encabezado de dbgmodel.h

Consulte también

de interfaz IDataModelConcept de