Método IDataModelManager2::CreateTypedIntrinsicObject (dbgmodel.h)
El método CreateTypedintrinsicObject es similar al método CreateIntrinsicObject, excepto que permite asociar un tipo nativo o de idioma a los datos y llevar junto con el valor boxing. Esto permite que el modelo de datos represente construcciones como tipos de enumeración nativos (que simplemente son valores VT_UI* o VT_I*). Los tipos de puntero también se crean con este método. Un puntero nativo en el modelo de datos es una cantidad extendida de 64 bits cero que representa un desplazamiento en el espacio de direcciones virtuales del destino de depuración. Se aplica una conversión boxing dentro de un VT_UI8 y se crea con este método y un tipo que indica un puntero nativo o de idioma.
Sintaxis
HRESULT CreateTypedIntrinsicObject(
VARIANT *intrinsicData,
IDebugHostType *type,
IModelObject **object
);
Parámetros
intrinsicData
Variant que contiene el valor que se va a boxear dentro de un contenedor IModelObject . Tenga en cuenta que este método no admite construcciones VT_UNKNOWN. Todo lo que se pasa a este método debe ser expresable como ObjectIntrinsic
type
El tipo de idioma o nativo del valor.
object
El valor recién boxeado (como IModelObject) se devolverá aquí.
Valor devuelto
Este método devuelve HRESULT, que indica que se ha realizado correctamente o no.
Comentarios
Código de ejemplo
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!
}
Requisitos
Requisito | Valor |
---|---|
Header | dbgmodel.h |