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

こちらもご覧ください

IDataModelManager インターフェイス