Метод IDataModelManager2::CreateTypedIntrinsicObject (dbgmodel.h)
Метод 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 |