IDataModelManager2::CreateTypedIntrinsicObject, méthode (dbgmodel.h)

La méthode CreateTypedintrinsicObject est similaire à la méthode CreateIntrinsicObject, sauf qu’elle permet à un type natif/de langue d’être associé aux données et transporté avec la valeur boxée. Cela permet au modèle de données de représenter des constructions telles que des types d’énumération natifs (qui sont simplement des valeurs VT_UI* ou VT_I*). Les types de pointeurs 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/langue.

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 comme ObjectIntrinsic

type

Type natif/langue de la valeur.

object

La valeur nouvellement boxée (en tant qu’IModelObject) est retournée ici.

Valeur retournée

Cette méthode retourne HRESULT qui indique la réussite ou l’échec.

Notes

Exemple de Code

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

Spécifications

   
En-tête dbgmodel.h

Voir aussi

Interface IDataModelManager2