IDataModelManager4::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<IDataModelManager4> 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 |