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

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

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

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

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

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

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

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

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

Метод Разыменования разыменовывает объект.
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, за исключением того, что он преобразует значение в указанный тип variant.
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 запрашивает узел отладки для выполнения анализа и определения фактического типа среды выполнения (наиболее производного класса) данного объекта.

Требования

Требование Значение
Заголовок dbgmodel.h