Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Метод CreateTypedintrinsicObject аналогичен методу CreateIntrinsicObject, за исключением того, что он позволяет связать собственный или языковой тип с данными и перенести вместе с полем. Это позволяет модели данных представлять такие конструкции, как собственные типы перечисления (которые просто VT_UI* или VT_I*). Типы указателей также создаются с помощью этого метода. Собственный указатель в модели данных — это нулевая 64-разрядная величина, представляющая смещение в виртуальное адресное пространство целевого объекта отладки. Он находится в VT_UI8 и создается с помощью этого метода и типа, который указывает указатель на машинный или языковой код.
Синтаксис
HRESULT CreateTypedIntrinsicObject(
VARIANT *intrinsicData,
IDebugHostType *type,
IModelObject **object
);
Параметры
intrinsicData
Variant, содержащий значение, которое будет упаковаться в контейнер IModelObject. Обратите внимание, что этот метод не поддерживает конструкции VT_UNKNOWN. Все, переданное этому методу, должно быть выражено как ObjectIntrinsic
type
Собственный или языковой тип значения.
object
Новое поле (как IModelObject) будет возвращено здесь.
Возвращаемое значение
Этот метод возвращает HRESULT, указывающий на успешность или сбой.
Замечания
пример кода
ComPtr<IDataModelManager> spManager; /* get the data model manager */
ComPtr<IDebugHostType> spEnumType; /* get an enum type (see CreateTypedObject) */
ComPtr<IDebugHostType> spPtrType; /* get a pointer type (see CreateTypedObject) */
// Box an enum
VARIANT vtEnumValue;
vtEnumValue.vt = VT_I4;
vtEnumValue.lVal = 2;
ComPtr<IModelObject> spEnumValue;
if (SUCCEEDED(spManager->CreateTypedIntrinsicObject(&vtEnumValue,
spEnumType.Get(),
&spEnumValue)))
{
// spEnumValue now contains the value '2' expressed as the enum type
// in spEnumType. The value will still present as 2 and operate as any other int.
// A type query on the object will, however, yield the enum type.
}
// Box a pointer. All pointers are represented as unsigned 64-bit values.
// 32-bit pointers are **ZERO EXTENDED** to 64-bits.
VARIANT vtPtrValue;
vtPtrValue.vt = VT_UI8;
vtPtrValue.ullVal = 0x100; // the pointer address
ComPtr<IModelObject> spPtrValue;
if (SUCCEEDED(spManager->CreateTypedIntrinsicObject(&vtPtrValue, spPtrType.Get(), &spPtrValue)))
{
// spPtrValue now contains a <TYPE (POINTER)>(0x100). You can fetch
// the pointer address through standard means of GetIntrinsicValue(As).
// Dereference() will work on spPtrValue!
}
Требования
Требование | Ценность |
---|---|
заголовка | dbgmodel.h |