Interfaz IModelObject (dbgmodel.h)

Una de las cosas más básicas y eficaces sobre el modelo de datos es que estandariza la definición de lo que es un objeto y cómo interactúa con un objeto. La interfaz IModelObject encapsula la noción de un objeto , ya sea que ese objeto sea un entero, un valor de punto flotante, una cadena, algún tipo complejo en el espacio de direcciones de destino del depurador o algún concepto del depurador como la noción de un proceso o un módulo.

Hay varias cosas diferentes que se pueden mantener en un objeto IModelObject (o en el que se puede boxearse):

• Valores intrínsecos: un IModelObject puede ser un contenedor para varios tipos básicos: 8, 16, 32 o 64 bits con signo o enteros sin signo, booleanos, cadenas, errores o la noción de vacío.

• Objetos nativos: un IModelObject puede representar un tipo complejo (definido por el sistema de tipos del depurador) dentro del espacio de direcciones del que el depurador tenga como destino.

• Objetos sintéticos : un objeto IModelObject puede ser un objeto dinámico, un diccionario si lo hará: una colección de tuplas clave/valor/metadatos y un conjunto de conceptos que definen comportamientos que no se representan simplemente mediante pares clave-valor.

• Propiedades : un IModelObject puede representar una propiedad: algo cuyo valor se puede recuperar o modificar con una llamada de método. Una propiedad dentro de un IModelObject es eficazmente una interfaz IModelPropertyAccessor boxed en un IModelObject

• Métodos : un IModelObject puede representar un método: algo que se puede llamar con un conjunto de argumentos y obtener un valor devuelto. Un método dentro de un IModelObject es eficazmente una interfaz IModelMethod boxed en un IModelObject

Un IModelObject no es un objeto de forma aislada. Además de representar uno de los tipos de objetos mostrados anteriormente, cada objeto tiene la noción de una cadena de modelos de datos primarios. Esta cadena se comporta de forma muy similar a | Cadena de prototipos de JavaScript. En lugar de una cadena lineal de prototipos como JavaScript, cada objeto de modelo de datos define una cadena lineal de modelos primarios. Cada uno de esos modelos primarios a su vez tiene otra cadena lineal de su propio conjunto de elementos primarios. En esencia, cada objeto es una agregación de las funcionalidades (propiedades, etc...), tanto de sí como de cada objeto de este árbol. Cuando se consulta una propiedad específica, si el objeto en el que se consulta no admite esa propiedad, la consulta se pasa linealmente a cada elemento primario a su vez. Esto crea un comportamiento en el que la búsqueda de una propiedad se resuelve mediante una búsqueda en primer lugar de profundidad del árbol agregado.

La extensibilidad dentro de este modelo de objetos es muy sencilla, dado que cada objeto es un agregado de sí mismo y el árbol de modelos primarios. Una extensión puede entrar y agregarse a la lista de modelos primarios para otro objeto. Al hacerlo, se extiende el objeto . De esta manera, es posible agregar funcionalidades a cualquier cosa: una instancia determinada de un objeto o valor, un tipo nativo, el concepto del depurador de lo que es un proceso o subproceso, o incluso la noción de "todos los objetos iterables".

Herencia

IModelObject hereda de IUnknown.

Métodos

La interfaz IModelObject tiene estos métodos.

 
IModelObject::AddParentModel

El método AddParentModel agrega un nuevo modelo primario al objeto especificado.
IModelObject::AddRef

El método AddRef incrementa el recuento de referencias de una interfaz en un objeto . Este método pertenece a la interfaz IModelObject.
IModelObject::ClearConcepts

El método ClearConcepts quitará todos los conceptos de la instancia del objeto especificado por este.
IModelObject::ClearKeys

El método ClearKeys quita todas las claves y sus valores y metadatos asociados de la instancia del objeto especificado por este.
IModelObject::Compare

El método Compare compara dos objetos de modelo y devuelve una indicación de cómo se relacionan esos objetos.
IModelObject::D ereference

El método Dereference desreferencia un objeto.
IModelObject::EnumerateKeyReferences

El método EnumerateKeyReferences se comporta de forma similar al método EnumerateKeyValues, excepto que devuelve referencias a las claves que enumera en lugar del valor de la clave.
IModelObject::EnumerateKeys

Enumera las claves dentro del proveedor de claves dinámicas.
IModelObject::EnumerateKeyValues

El método EnumerateKeyValues es el primer método al que un cliente cambiará para enumerar todas las claves de un objeto.
IModelObject::EnumerateRawReferences

El método EnumerateRawReferences enumera las referencias a todos los elementos secundarios nativos (campos, clases base, etc.) del objeto especificado.
IModelObject::EnumerateRawValues

El método EnumerateRawValues enumera todos los elementos secundarios nativos (campos, clases base, etc.) del objeto especificado.
IModelObject::GetConcept

El método GetConcept buscará un concepto en el objeto (o su cadena de modelos principal) y devolverá un puntero de interfaz a la interfaz de concepto.
IModelObject::GetContext

El método GetContext devuelve el contexto de host asociado al objeto .
IModelObject::GetContextForDataModel

El método GetContextForDataModel se usa para recuperar información de contexto que se configuró con una llamada anterior a SetContextForDataModel.
IModelObject::GetIntrinsicValue

El método GetIntrinsicValue devuelve el elemento que se conversión boxing dentro de un IModelObject.
IModelObject::GetIntrinsicValueAs

El método GetIntrinsicValueAs se comporta tanto como el método GetIntrinsicValue, excepto que convierte el valor en el tipo de variante especificado.
IModelObject::GetKey

El método GetKey obtendrá el valor de (y los metadatos asociados a) una clave determinada por nombre.
IModelObject::GetKeyReference

Si el objeto o uno de sus modelos primarios tienen una clave denominada según el argumento "key", devolverá una referencia a esa clave.
IModelObject::GetKeyValue

El método GetKeyValue es el primer método al que un cliente cambiará para obtener el valor de (y los metadatos asociados a) una clave determinada por nombre.
IModelObject::GetKind

El método GetKind devuelve qué tipo de objeto se boxea dentro del objeto IModelObject.
IModelObject::GetLocation

El método GetLocation devolverá la ubicación del objeto nativo. Aunque esta ubicación suele ser una dirección virtual dentro del espacio de direcciones del destino de depuración, no es necesariamente así.
IModelObject::GetNumberOfParentModels

El método GetNumberOfParentModels devuelve el número de modelos primarios que se adjuntan a la instancia de objeto especificada.
IModelObject::GetParentModel

El método GetParentModel devuelve el modelo primario i-th en la cadena del modelo primario del objeto especificado.
IModelObject::GetRawReference

El método GetRawReference busca una construcción nativa dentro del objeto especificado y devuelve una referencia a él.
IModelObject::GetRawValue

El método GetRawValue busca una construcción nativa dentro del objeto especificado. Esta construcción puede ser un campo, una clase base, un campo de una clase base, una función miembro, etc.
IModelObject::GetTargetInfo

El método GetTargetInfo es eficazmente una combinación de los métodos GetLocation y GetTypeInfo que devuelven la ubicación abstracta, así como el tipo nativo del objeto especificado.
IModelObject::GetTypeInfo

El método GetTypeInfo devolverá el tipo nativo del objeto especificado. Si el objeto no tiene información de tipo nativo asociada a ella, la llamada seguirá siendo correcta, pero devolverá null.
IModelObject::IsEqualTo

El método IsEqualTo compara un contexto de host con otro contexto de host. Si los dos contextos son equivalentes, se devuelve una indicación de esto. Tenga en cuenta que esta comparación no es equivalencia de interfaz.
IModelObject::QueryInterface

El método IModelObject::QueryInterface recupera punteros a las interfaces admitidas en un objeto .
IModelObject::Release

El método IModelObject::Release disminuye el recuento de referencias de una interfaz en un objeto .
IModelObject::RemoveParentModel

RemoveParentModel quitará un modelo primario especificado de la cadena de búsqueda primaria del objeto especificado.
IModelObject::SetConcept

El método SetConcept colocará un concepto especificado en la instancia de objeto especificada por este puntero.
IModelObject::SetContextForDataModel

La implementación de un modelo de datos usa el método SetContextForDataModel para colocar datos de implementación en objetos de instancia.
IModelObject::SetKey

El método SetKey es el método al que un cliente cambiará para crear una clave en un objeto (y posiblemente asociar metadatos a la clave creada).
IModelObject::SetKeyValue

El método SetKeyValue es el primer método al que un cliente cambiará para establecer el valor de una clave. Este método no se puede usar para crear una nueva clave en un objeto .
IModelObject::TryCastToRuntimeType

El método TryCastToRuntimeType pedirá al host de depuración que realice un análisis y determine el tipo en tiempo de ejecución real (la clase más derivada) del objeto especificado.

Requisitos

Requisito Valor
Header dbgmodel.h