Condividi tramite


Metodo IDataModelConcept::InitializeObject (dbgmodel.h)

Un modello di dati può essere registrato come visualizzatore canonico o come estensione per un determinato tipo nativo tramite i metodi RegisterModelForTypeSignature o RegisterExtensionForTypeSignature. Quando un modello viene registrato tramite uno di questi metodi, il modello di dati viene collegato automaticamente come modello padre a qualsiasi oggetto nativo il cui tipo corrisponde alla firma passata nella registrazione. Nel punto in cui viene eseguito automaticamente l'allegato, il metodo InitializeObject viene chiamato nel modello di dati. Viene passato l'oggetto istanza, la firma del tipo che ha causato l'allegato e un enumeratore che produce le istanze di tipo (in ordine lineare) che corrispondono a qualsiasi carattere jolly nella firma del tipo. L'implementazione del modello di dati può usare questa chiamata al metodo per inizializzare tutte le cache necessarie.

Sintassi

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

Parametri

modelObject

Oggetto dell'istanza che viene inizializzato.

matchingTypeSignature

Firma del tipo a cui corrisponde il tipo nativo di modelObject che ha causato l'allegato del modello di dati.

wildcardMatches

Se la firma del tipo corrispondente include caratteri jolly, questo argomento conterrà un enumeratore che enumererà il modo in cui ogni carattere jolly corrisponde. In genere, ogni IDebugHostSymbol enumerato qui è un IDebugHostType. Questo non è tuttavia un requisito. Gli argomenti modello non di tipo (tra gli altri) possono corrispondere a caratteri jolly e possono produrre simboli come IDebugHostConstant.

Valore restituito

Questo metodo restituisce HRESULT che indica l'esito positivo o l'errore. L'errore di questo metodo impedirà la costruzione di oggetti dell'istanza.

Commenti

Si noti che un'implementazione specifica del modello di dati non può presupporre che la chiamata InitializeObject venga effettuata per ogni oggetto a cui è collegato il modello di dati. Poiché il modello di dati è un sistema completamente dinamico, è completamente possibile che un chiamante acquisisca direttamente un modello (tramite, ad esempio, il metodo GetParentModel in IModelObject) e collegarlo manualmente. In tale circostanza, la chiamata InitializeObject non sarà stata effettuata e l'implementazione deve essere preparata a farlo. La chiamata di questo metodo è un'ottimizzazione per consentire implementazioni costose di precompilare e preinitizzare le cache dei prerequisiti.

Esempio di implementazione

Si noti che un client non chiamerà mai questa interfaccia.

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

Requisiti

Requisito Valore
Intestazione dbgmodel.h

Vedi anche

Interfaccia IDataModelConcept