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 porté avec la valeur encadré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 encadré à l’intérieur d’un VT_UI8 et est créé avec cette méthode et un type qui indique un pointeur natif/de 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 en tant qu’ObjetIntrinsic
type
Type natif/de langue de la valeur.
object
La valeur nouvellement boxée (sous la forme d’un IModelObject) sera retournée ici.
Valeur retournée
Cette méthode retourne HRESULT qui indique la réussite ou l’échec.
Remarques
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!
}
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | dbgmodel.h |