Поделиться через


Интерфейс IModelObject (dbgmodel.h)

Интерфейс IModelObject инкапсулирует понятие объекта— является ли этот объект целым числом, строкой, некоторыми сложными типами целевого адресного пространства отладчика.

Наследство

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-th в цепочке родительской модели заданного объекта.
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 предложит узлу отладки выполнить анализ и определить фактический тип среды выполнения (наиболее производный класс) данного объекта.

Замечания

Одним из самых простых, но мощных вещей в модели данных является то, что он стандартизирует определение того, что является объектом, и как он взаимодействует с объектом. Интерфейс IModelObject инкапсулирует понятие объекта, будь то целое число, значение с плавающей запятой, строка, некоторый сложный тип в целевом адресном пространстве отладчика или некоторые понятия отладчика, такие как понятие процесса или модуля.

Существует несколько разных вещей, которые можно хранить в (или боксировать в) IModelObject:

• Встроенные значения — IModelObject может быть контейнером для ряда основных типов: 8, 16, 32 или 64-разрядных целых чисел, логических чисел, строк, ошибок или понятия пустых.

• Собственные объекты — IModelObject может представлять сложный тип (как определено системой типов отладчика) в адресном пространстве независимо от целевого объекта отладчика.

• Искусственные объекты — IModelObject может быть динамическим объектом — словарем, если вы будете: коллекция ключей/ значений / кортежей метаданных и набор понятий, определяющих поведение, которые не просто представлены парами "ключ - значение".

• Свойства — IModelObject может представлять свойство: что-то, значение которого можно получить или изменить с помощью вызова метода. Свойство в IModelObject фактически является интерфейсом IModelPropertyAccessor, размещенным в IModelObject

• Методы — IModelObject может представлять метод: то, что можно вызвать с набором аргументов и получить возвращаемое значение. Метод в IModelObject — это фактически интерфейс IModelMethod в IModelObject

IModelObject не является объектом в изоляции. Помимо представления одного из типов объектов, показанных выше, каждый объект имеет представление о цепочке родительских моделей данных. Эта цепочка ведет себя так же, как | Цепочка прототипов JavaScript. Вместо линейной цепочки прототипов, таких как JavaScript, каждый объект модели данных определяет линейную цепочку родительских моделей. Каждая из этих родительских моделей в свою очередь имеет другую линейную цепочку собственных наборов родителей. В сущности, каждый объект является агрегированием возможностей (свойств и т. д.) как самого, так и каждого объекта в этом дереве. При запросе определенного свойства, если объект, на который он запрашивается, не поддерживает это свойство, запрос передается в линейном порядке каждому родительскому элементу в свою очередь. Это создает поведение, в котором поиск свойства разрешается путем поиска по глубине дерева агрегата.

Расширяемость в этой объектной модели очень проста, учитывая это понятие, что каждый объект является агрегатом самого себя и дерева родительских моделей. Расширение может входить и добавляться в список родительских моделей для другого объекта. Это расширяет объект. Таким образом, можно добавить возможности на все: конкретный экземпляр объекта или значения, собственный тип, понятие отладчика о том, что такое процесс или поток, или даже понятие "все итерируемые объекты".

Требования

Требование Ценность
заголовка dbgmodel.h

См. также

Обзор интерфейсов C++ для отладчика модели данных C++