Metodo IModelObject::SetContextForDataModel (dbgmodel.h)

Il metodo SetContextForDataModel viene utilizzato dall'implementazione di un modello di dati per inserire i dati di implementazione negli oggetti dell'istanza. Concettualmente, ogni IModelObject (chiamare questa istanza per semplicità) contiene una tabella hash di stato. La tabella hash viene indicizzata da un altro IModelObject (chiamare questo modello di dati per semplicità) che si trova nella gerarchia del modello padre dell'istanza. Il valore contenuto in questo hash è un set di informazioni sullo stato con conteggio dei riferimenti rappresentate da un'istanza IUnknown. Dopo che il modello di dati imposta questo stato nell'istanza, può archiviare dati di implementazione arbitrari che possono essere recuperati durante operazioni quali getter di proprietà.

Spesso le estensioni (o altri componenti del modello di dati) vogliono rappresentare un costrutto sintetico come quello che si potrebbe considerare un tipo. L'esposizione degli oggetti processo del debugger è un esempio simile. Spesso, un'implementazione esegue il mapping del concetto di definizione di tipo a un modello di dati. Il modello di dati conterrà i getter di proprietà per gli elementi esposti nell'oggetto , ad esempio nome del processo, ID processo, numero di thread, thread e così via. Quando è il momento di creare un'istanza di questo modello di dati, viene creato un oggetto sintetico vuoto e il modello di dati (o ciò che si potrebbe considerare la definizione del tipo) viene associato come modello padre. In alcuni casi, informazioni sufficienti per identificare in modo univoco l'oggetto e implementare tutti i getter delle proprietà del modello di dati potrebbero essere in grado di essere posizionati direttamente sull'oggetto istanza. Nell'esempio di processo, l'ID processo potrebbe essere archiviato come chiave denominata ID nell'istanza. Quando viene chiamato un getter nel modello di dati, ad esempio per il nome del processo, l'implementazione può semplicemente chiamare il metodo GetKeyValue per recuperare l'ID del processo. L'implementazione necessaria per restituire il nome può quindi eseguire questa operazione dal PID. In altri casi, lo stato necessario per implementare il tipo è più complesso, contiene altri costrutti nativi o per altri motivi non può essere impostato come chiave di istanza. In questi casi, il modello di dati creerà una classe derivata IUnknown, inserisce i dati di implementazione all'interno di questa classe e chiamerà il metodo SetContextForDataModel nell'istanza per associare i dati di implementazione all'oggetto istanza. Quando l'istanza viene distrutto, il conteggio dei riferimenti sulla classe di stato verrà rilasciato e verrà liberato in base alle esigenze

Sintassi

HRESULT SetContextForDataModel(
  IModelObject *dataModelObject,
  IUnknown     *context
);

Parametri

dataModelObject

IModelObject che rappresenta il modello di dati per il quale viene archiviato lo stato in un oggetto istanza. Si tratta, in effetti, di una chiave hash per l'oggetto di stato associato.

context

Stato associato all'istanza di . Il significato esatto di questa (e di qualsiasi altra interfaccia, ecc. supportato) è fino al modello di dati che effettua la chiamata per impostare questo stato. L'unico requisito è che tale stato sia contato come riferimento COM.

Valore restituito

Questo metodo restituisce HRESULT che indica l'esito positivo o negativo.

Commenti

Codice di esempio

ComPtr<IModelObject> spObject;          /* get an object */
ComPtr<IModelObject> spDataModelObject; /* get an attached data model (from earlier
                                           AddParentModel or from GetParentModel) anywhere in 
                                           the ancestor tree */

// Context data must be IUnknown derived.  Otherwise, implementation is opaque to the data model.
class MyContextData :
    public Microsoft::WRL::RuntimeClass<
        Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>,
        IUnknown
        >
{
    /* put whatever you want here */
};

ComPtr<MyContextData> spContextData = Microsoft::WRL::Make<MyContextData>();
if (SUCCEEDED(spObject->SetContextForDataModel(spDataModelObject.Get(), spContextData.Get())))
{
    // There is now context data associated with spObject (an instance) for 
    // spDataModelObject (a parent model).  This can be fetched via
    // GetContextForDataModel.  Note that spObject and spDataModelObject only need t
    // to be related.  The model does not need to be an immediate parent.
}

Requisiti

Requisito Valore
Intestazione dbgmodel.h

Vedi anche

Interfaccia IModelObject