Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Интерфейс 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++ для отладчика