IDataModelManager::CreateTypedIntrinsicObject メソッド (dbgmodel.h)
CreateTypedintrinsicObject メソッドは CreateIntrinsicObject メソッドに似ていますが、ネイティブ/言語型をデータに関連付け、ボックス化された値と共に実行できる点が異なります。 これにより、データ モデルはネイティブ列挙型 (単純にVT_UI* または VT_I* 値) などのコンストラクトを表すことができます。 ポインター型もこのメソッドで作成されます。 データ モデルのネイティブ ポインターは、デバッグ ターゲットの仮想アドレス空間へのオフセットを表す 0 個の拡張 64 ビット数量です。 VT_UI8内にボックス化され、このメソッドとネイティブ/言語ポインターを示す型で作成されます。
構文
HRESULT CreateTypedIntrinsicObject(
VARIANT *intrinsicData,
IDebugHostType *type,
IModelObject **object
);
パラメーター
intrinsicData
IModelObject コンテナー内でボックス化される値を含む VARIANT。 このメソッドは、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 |