IDataModelManager4::CreateTypedIntrinsicObject-Methode (dbgmodel.h)
Die CreateTypedintrinsicObject-Methode ähnelt der CreateIntrinsicObject-Methode, mit der Ausnahme, dass ein systemeigener/sprachiger Typ den Daten zugeordnet und zusammen mit dem Boxwert übertragen werden kann. Auf diese Weise kann das Datenmodell Konstrukte wie systemeigene Enumerationstypen darstellen (die einfach VT_UI* oder VT_I*-Werte sind). Zeigertypen werden auch mit dieser Methode erstellt. Ein nativer Zeiger im Datenmodell ist eine erweiterte 64-Bit-Menge, die einen Offset in den virtuellen Adressraum des Debugziels darstellt. Es wird in einer VT_UI8 eingeschachtelt und mit dieser Methode erstellt und ein Typ, der einen systemeigenen/sprachlichen Zeiger angibt.
Syntax
HRESULT CreateTypedIntrinsicObject(
VARIANT *intrinsicData,
IDebugHostType *type,
IModelObject **object
);
Parameter
intrinsicData
A VARIANT containing the value which is will be boxd inside an IModelObject container. Beachten Sie, dass diese Methode VT_UNKNOWN Konstrukte nicht unterstützt. Alles, was an diese Methode übergeben wird, muss als ObjectIntrinsic ausdrucksfähig sein.
type
Der Native/Language-Typ des Werts.
object
Der neu eingeschachtelte Wert (als IModelObject) wird hier zurückgegeben.
Rückgabewert
Diese Methode gibt HRESULT zurück, das Erfolg oder Fehler angibt.
Bemerkungen
Beispielcode-
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!
}
Anforderungen
Anforderung | Wert |
---|---|
Header- | dbgmodel.h |