Metodo IDataModelManager2::CreateTypedIntrinsicObject (dbgmodel.h)
Il metodo CreateTypedintrinsicObject è simile al metodo CreateIntrinsicObject, ad eccezione del fatto che consente l'associazione di un tipo nativo/linguistico ai dati e portato insieme al valore boxed. Ciò consente al modello di dati di rappresentare costrutti come i tipi di enumerazione nativa (che sono semplicemente VT_UI* o VT_I* valori). I tipi di puntatore vengono creati anche con questo metodo. Un puntatore nativo nel modello di dati è una quantità di 64 bit estesa zero che rappresenta un offset nello spazio indirizzi virtuale della destinazione di debug. Viene casellato all'interno di un VT_UI8 e viene creato con questo metodo e un tipo che indica un puntatore nativo/linguistico.
Sintassi
HRESULT CreateTypedIntrinsicObject(
VARIANT *intrinsicData,
IDebugHostType *type,
IModelObject **object
);
Parametri
intrinsicData
VARIANT contenente il valore che verrà casellato all'interno di un contenitore IModelObject . Si noti che questo metodo non supporta i costrutti VT_UNKNOWN. Qualsiasi elemento passato a questo metodo deve essere espresso come ObjectIntrinsic
type
Tipo nativo/lingua del valore.
object
Il valore appena casellato (come IModelObject) verrà restituito qui.
Valore restituito
Questo metodo restituisce HRESULT che indica l'esito positivo o l'errore.
Commenti
Codice di esempio
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!
}
Requisiti
Requisito | Valore |
---|---|
Intestazione | dbgmodel.h |