IDataModelManager4 ::CreateTypedIntrinsicObject, méthode (dbgmodel.h)
La méthode CreateTypedintrinsicObject est similaire à la méthode CreateIntrinsicObject, à l’exception du fait qu’elle permet à un type natif/de langue d’être associé aux données et porté avec la valeur boxed. Cela permet au modèle de données de représenter des constructions telles que des types d’énumération natifs (qui sont simplement VT_UI* ou des valeurs VT_I*). Les types de pointeur sont également créés avec cette méthode. Un pointeur natif dans le modèle de données est une quantité 64 bits étendue zéro représentant un décalage dans l’espace d’adressage virtuel de la cible de débogage. Il est boxé à l’intérieur d’un VT_UI8 et est créé avec cette méthode et un type qui indique un pointeur natif/langage.
Syntaxe
HRESULT CreateTypedIntrinsicObject(
VARIANT *intrinsicData,
IDebugHostType *type,
IModelObject **object
);
Paramètres
intrinsicData
VARIANT contenant la valeur qui va être boxée à l’intérieur d’un conteneur IModelObject. Notez que cette méthode ne prend pas en charge les constructions VT_UNKNOWN. Tout ce qui est passé à cette méthode doit être expressable en tant qu’ObjectIntrinsic
type
Type natif/langue de la valeur.
object
La valeur nouvellement boxée (en tant que IModelObject) est retournée ici.
Valeur de retour
Cette méthode retourne HRESULT qui indique la réussite ou l’échec.
Remarques
exemple de code
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!
}
Exigences
Exigence | Valeur |
---|---|
d’en-tête | dbgmodel.h |