IModelObject 接口 (dbgmodel.h)
数据模型最基本但最强大的功能之一是,它标准化了对象的定义以及对象与对象的交互方式。 IModelObject 接口封装对象的概念-无论该对象是整数、浮点值、字符串、调试器的目标地址空间中的某个复杂类型,还是某个调试器概念(如进程或模块的概念)。
有几个不同的东西可以保存在 (或装箱到 IModelObject) :
• 内部值 - IModelObject 可以是许多基本类型的容器:8、16、32 或 64 位有符号或无符号整数、布尔值、字符串、错误或空概念。
• 本机对象 - IModelObject 可以表示由调试器类型系统定义的复杂类型 () 在调试器所针对的任何地址空间中
• 合成对象 - IModelObject 可以是动态对象 -- 字典(如果需要):键/值/元数据元组的集合和一组概念,这些概念定义行为,这些行为不只是由键/值对表示。
• 属性 - IModelObject 可以表示属性:可以使用方法调用检索或更改其值的内容。 IModelObject 中的属性实际上是装箱到 IModelObject 中的 IModelPropertyAccessor 接口
• 方法 - IModelObject 可以表示方法:可以使用一组参数调用的方法并获取返回值。 IModelObject 中的方法实际上是装箱到 IModelObject 中的 IModelMethod 接口
IModelObject 不是独立对象。 除了表示上面所示的对象类型之一外,每个对象都具有父数据模型链的概念。 此链的行为非常类似于 |JavaScript 原型链。 每个数据模型对象都定义了父模型的线性链,而不是 JavaScript 等原型的线性链。 每个父模型又有另一个线性链,这些父模型具有自己的父级集。 从本质上讲,每个对象都是功能 (属性等的聚合。) 自身和此树中的每个对象。 查询特定属性时,如果查询该属性的对象不支持该属性,则查询将依次按线性顺序传递给每个父级。 这会创建一种行为,即通过对聚合树的深度优先搜索解析对属性的搜索。
鉴于每个对象都是自身和父模型树的聚合,此对象模型中的扩展性非常简单。 扩展可以传入并将自身添加到另一个对象的父模型列表中。 执行此操作会扩展 对象。 通过这种方式,可以向任何内容添加功能:对象或值的特定实例、本机类型、调试器的进程或线程的概念,甚至“所有可迭代对象”的概念。
继承
IModelObject 继承自 IUnknown。
方法
IModelObject 接口具有这些方法。
IModelObject::AddParentModel AddParentModel 方法将新的父模型添加到给定对象。 |
IModelObject::AddRef AddRef 方法递增对象上接口的引用计数。 此方法属于 IModelObject 接口。 |
IModelObject::ClearConcepts ClearConcepts 方法将从由此指定的 对象的实例中删除所有概念。 |
IModelObject::ClearKeys ClearKeys 方法从由此指定的对象的实例中删除所有键及其关联的值和元数据。 |
IModelObject::Compare Compare 方法比较两个模型对象,并返回这些对象如何关联的指示。 |
IModelObject::D ereference Dereference 方法取消引用对象。 |
IModelObject::EnumerateKeyReferences EnumerateKeyReferences 方法的行为类似于 EnumerateKeyValues 方法,只不过它返回对其枚举的键而不是键值的引用。 |
IModelObject::EnumerateKeys 枚举动态密钥提供程序中的密钥。 |
IModelObject::EnumerateKeyValues EnumerateKeyValues 方法是客户端为了枚举对象上所有键而要转向的第一种方法。 |
IModelObject::EnumerateRawReferences EnumerateRawReferences 方法枚举对所有本机子级的引用, (字段、基类等...给定对象的 ) 。 |
IModelObject::EnumerateRawValues EnumerateRawValues 方法枚举所有本机子 (字段、基类等...给定对象的 ) 。 |
IModelObject::GetConcept GetConcept 方法将在对象 (或其父模型链) 搜索概念,并返回指向概念接口的接口指针。 |
IModelObject::GetContext GetContext 方法返回与 对象关联的主机上下文。 |
IModelObject::GetContextForDataModel GetContextForDataModel 方法用于检索通过先前调用 SetContextForDataModel 设置的上下文信息。 |
IModelObject::GetIntrinsicValue GetIntrinsicValue 方法返回装箱在 IModelObject 中的东西。 |
IModelObject::GetIntrinsicValueAs GetIntrinsicValueAs 方法的行为与 GetIntrinsicValue 方法相同,只是将值转换为指定的变体类型。 |
IModelObject::GetKey GetKey 方法将获取 (的值以及与按名称) 给定键关联的元数据。 |
IModelObject::GetKeyReference 如果对象或其父模型之一具有根据参数“key”命名的键,则会返回对该键的引用。 |
IModelObject::GetKeyValue GetKeyValue 方法是客户端为了获取 (值以及与按名称) 给定键关联的元数据的第一种方法。 |
IModelObject::GetKind GetKind 方法返回在 IModelObject 中装箱的对象类型。 |
IModelObject::GetLocation GetLocation 方法将返回本机对象的位置。 虽然此类位置通常是调试目标的地址空间中的虚拟地址,但并不一定如此。 |
IModelObject::GetNumberOfParentModels GetNumberOfParentModels 方法返回附加到给定对象实例的父模型的数量。 |
IModelObject::GetParentModel GetParentModel 方法返回给定对象的父模型链中的第 i 个父模型。 |
IModelObject::GetRawReference GetRawReference 方法在给定对象中查找本机构造,并返回对它的引用。 |
IModelObject::GetRawValue GetRawValue 方法在给定对象中查找本机构造。 此类构造可以是字段、基类、基类中的字段、成员函数等。 |
IModelObject::GetTargetInfo GetTargetInfo 方法实际上是 GetLocation 和 GetTypeInfo 方法的组合,返回给定对象的抽象位置和本机类型。 |
IModelObject::GetTypeInfo GetTypeInfo 方法将返回给定对象的本机类型。 如果对象没有与之关联的本机类型信息,则调用仍将成功,但将返回 null。 |
IModelObject::IsEqualTo IsEqualTo 方法将主机上下文与另一个主机上下文进行比较。 如果这两个上下文等效,则会返回指示这一点。 请注意,此比较不是接口等效。 |
IModelObject::QueryInterface IModelObject::QueryInterface 方法检索指向对象上支持的接口的指针。 |
IModelObject::Release IModelObject::Release 方法递减对象上接口的引用计数。 |
IModelObject::RemoveParentModel RemoveParentModel 将从给定对象的父搜索链中删除指定的父模型。 |
IModelObject::SetConcept SetConcept 方法会将指定的概念放在此指针指定的对象实例上。 |
IModelObject::SetContextForDataModel 数据模型的实现使用 SetContextForDataModel 方法将实现数据放置在实例对象上。 |
IModelObject::SetKey SetKey 方法是客户端为了在对象 (创建密钥,并可能将元数据与创建的密钥) 相关联而使用的方法。 |
IModelObject::SetKeyValue SetKeyValue 方法是客户端为了设置键值而转用的第一个方法。 此方法不能用于在 对象上创建新键。 |
IModelObject::TryCastToRuntimeType TryCastToRuntimeType 方法将要求调试主机执行分析,并确定给定对象的大多数派生类 (实际运行时类型) 。 |
要求
要求 | 值 |
---|---|
Header | dbgmodel.h |
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈