Compartir a través de


Método IModelObject::SetContextForDataModel (dbgmodel.h)

La implementación de un modelo de datos usa el método SetContextForDataModel para colocar datos de implementación en objetos de instancia. Conceptualmente, cada IModelObject (llame a esta instancia para simplificar) contiene una tabla hash de estado. La tabla hash se indexa mediante otro IModelObject (llame a este modelo de datos para simplificar) que se encuentra en la jerarquía del modelo primario de la instancia. El valor contenido en este hash es un conjunto de información de estado contada de referencia representada por una instancia de IUnknown. Una vez que el modelo de datos establece este estado en la instancia, puede almacenar datos de implementación arbitrarios que se pueden recuperar durante elementos como los captadores de propiedades.

A menudo es el caso de que las extensiones (u otros componentes del modelo de datos) quieran representar alguna construcción sintética como lo que podría considerar un tipo. La exposición del depurador de objetos de proceso es un ejemplo de este tipo. Con frecuencia, una implementación asignará la noción de una definición de tipo a un modelo de datos. El modelo de datos contendrá captadores de propiedades para las cosas que se exponen en el objeto (por ejemplo: nombre del proceso, identificador de proceso, recuento de subprocesos, subprocesos, etc.). Cuando es el momento de crear una instancia de este modelo de datos, se crea un objeto sintético en blanco y se adjunta el modelo de datos (o lo que podríamos considerar la definición de tipo) como modelo primario. En algunos casos, es posible que la información suficiente para identificar de forma única el objeto e implementar todos los captadores de propiedades del modelo de datos pueda colocarse directamente en el objeto de instancia. En nuestro ejemplo de proceso, el identificador del proceso se puede almacenar como una clave denominada Id. en la instancia de . Cuando se llama a un captador en el modelo de datos, por ejemplo, para el nombre del proceso, por ejemplo, la implementación simplemente puede llamar al método GetKeyValue para capturar el identificador del proceso. La implementación necesaria para devolver el nombre puede hacerlo desde el PID. En otros casos, el estado necesario para implementar el tipo es más complejo, contiene otras construcciones nativas o, por otros motivos, no se puede establecer como una clave de instancia. En tales casos, el modelo de datos construirá una clase derivada IUnknown, colocará los datos de implementación dentro de esta clase y llamará al método SetContextForDataModel en la instancia para asociar sus datos de implementación con el objeto de instancia. Cuando la instancia se destructe, se liberará el recuento de referencias en la clase de estado y se liberará según sea necesario.

Sintaxis

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

Parámetros

dataModelObject

IModelObject que representa el modelo de datos para el que se almacena el estado en un objeto de instancia. Esto es, en efecto, una clave hash para el objeto de estado asociado.

context

Estado asociado a la instancia de . El significado exacto de esto (y cualquier otra interfaz, etc. que admite) es hasta el modelo de datos que realiza la llamada para establecer este estado. El único requisito es que dicho estado sea la referencia COM contada.

Valor devuelto

Este método devuelve HRESULT que indica éxito o error.

Comentarios

Ejemplo de código

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

Requisitos

Requisito Valor
Header dbgmodel.h

Consulte también

Interfaz IModelObject