IDataModelManager2::CreateTypedIntrinsicObject-Methode (dbgmodel.h)

Die CreateTypedintrinsicObject-Methode ähnelt der CreateIntrinsicObject-Methode, mit der Ausnahme, dass ein nativer/Sprachtyp den Daten zugeordnet und mit dem boxed-Wert mitgeführt werden kann. Dadurch kann das Datenmodell Konstrukte wie systemeigene Enumerationstypen darstellen (die einfach VT_UI* oder VT_I*-Werte sind). Mit dieser Methode werden auch Zeigertypen erstellt. Ein nativer Zeiger im Datenmodell ist eine erweiterte 64-Bit-Menge, die einen Offset in den virtuellen Adressraum des Debugziels darstellt. Es ist in einem VT_UI8 enthalten und wird mit dieser Methode und einem Typ erstellt, der einen Native/Language-Zeiger angibt.

Syntax

HRESULT CreateTypedIntrinsicObject(
  VARIANT        *intrinsicData,
  IDebugHostType *type,
  IModelObject   **object
);

Parameter

intrinsicData

Ein VARIANT-Wert, der den Wert enthält, der in einem IModelObject-Container eingeboxt werden soll. Beachten Sie, dass diese Methode VT_UNKNOWN-Konstrukte nicht unterstützt. Alles, was an diese Methode übergeben wird, muss als ObjectIntrinsic expressierbar sein.

type

Der Native/Language-Typ des Werts.

object

Der neu eingeboxte Wert (als IModelObject) wird hier zurückgegeben.

Rückgabewert

Diese Methode gibt HRESULT zurück, was auf Erfolg oder Fehler hinweist.

Hinweise

Beispielcode

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

Anforderungen

Anforderung Wert
Header dbgmodel.h

Weitere Informationen

IDataModelManager2-Schnittstelle