Метод 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, указывающий на успех или сбой.

Remarks

Образец кода

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

См. также раздел

Интерфейс IDataModelManager2