IDataModelManager::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!
}

要求

要求
Header dbgmodel.h

另请参阅

IDataModelManager 接口