DEBUG_ADDRESS_UNION
décrit différents genres d'adresses.
typedef struct _tagDEBUG_ADDRESS_UNION {
ADDRESS_KIND dwKind;
union {
NATIVE_ADDRESS addrNative;
UNMANAGED_ADDRESS_THIS_RELATIVE addrThisRel;
UNMANAGED_ADDRESS_PHYSICAL addrUPhysical;
METADATA_ADDRESS_METHOD addrMethod;
METADATA_ADDRESS_FIELD addrField;
METADATA_ADDRESS_LOCAL addrLocal;
METADATA_ADDRESS_PARAM addrParam;
METADATA_ADDRESS_ARRAYELEM addrArrayElem;
METADATA_ADDRESS_RETVAL addrRetVal;
DWORD unused;
} addr;
} DEBUG_ADDRESS_UNION;
public struct DEBUG_ADDRESS_UNION {
public ADDRESS_KIND dwKind;
public IntPtr unionmember;
}
termes
dwKind
Une valeur de l'énumération d' ADDRESS_KIND , en spécifiant comment interpréter l'union.addr.addrNative
[C++] uniquement contient la structure de NATIVE_ADDRESS si dwKind = ADDRESS_KIND_NATIVE.addr.addrThisRel
[C++] uniquement contient la structure deUNMANAGED_ADDRESS_THIS_RELATIVE si dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.addr.addUPhysical
[C++] uniquement contient la structure deUNMANAGED_ADDRESS_PHYSICAL si dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.addr.addrMethod
[C++] uniquement contient la structure deMETADATA_ADDRESS_METHOD si dwKind = ADDRESS_KIND_METHOD.addr.addrField
[C++] uniquement contient la structure deMETADATA_ADDRESS_FIELD si dwKind = ADDRESS_KIND_FIELD.addr.addrLocal
[C++] uniquement contient la structure deMETADATA_ADDRESS_LOCAL si dwKind = ADDRESS_KIND_LOCAL.addr.addrParam
[C++] uniquement contient la structure deMETADATA_ADDRESS_PARAM si dwKind = ADDRESS_KIND_PARAM.addr.addrArrayElem
[C++] uniquement contient la structure deMETADATA_ADDRESS_ARRAYELEM si dwKind = ADDRESS_KIND_ARRAYELEM.addr.addrRetVal
[C++] uniquement contient la structure deMETADATA_ADDRESS_RETVAL si dwKind = ADDRESS_KIND_RETVAL.addr.unused
[C++] uniquement effectuer.addr
[C++] uniquement le nom de l'union.unionmember
[C#] uniquement cette valeur doit être marshalé vers le type approprié de structure en fonction dwKind. Consultez la section notes de l'association entre dwKind et l'interprétation de l'union.
Notes
Cette structure fait partie de la structure de DEBUG_ADDRESS et représente un d'un certain nombre de types d'adresses (la structure d' DEBUG_ADDRESS est effectuée par un appel à la méthode d' IDebugAddress : : GetAddress ).
[C#] uniquement le tableau suivant montre comment interpréter le membre d' unionmember pour chaque type d'adresse. L'exemple montre comment cela est fait pour un type d'adresse.
dwKind |
unionmember a interprète comme |
---|---|
ADDRESS_KIND_NATIVE |
|
ADDRESS_KIND_UNMANAGED_THIS_RELATIVE |
|
ADDRESS_KIND_UNMANAGED_PHYSICAL |
|
ADDRESS_KIND_METHOD |
|
ADDRESS_KIND_FIELD |
|
ADDRESS_KIND_LOCAL |
|
ADDRESS_KIND_PARAM |
|
ADDRESS_KIND_ARRAYELEM |
|
ADDRESS_KIND_RETVAL |
Exemple
Cet exemple montre comment interpréter un type d'adresse (METADATA_ADDRESS_ARRAYELEM) de la structure d' DEBUG_ADDRESS_UNION en c#. Les éléments restants peuvent être interprètes de la même façon.
using System;
using System.Runtime.Interop.Services;
using Microsoft.VisualStudio.Debugger.Interop;
namespace MyPackage
{
public class MyClass
{
public void Interpret(DEBUG_ADDRESS_UNION dau)
{
if (dau.dwKind == (uint)enum_ADDRESS_KIND.ADDRESS_KIND_METADATA_ARRAYELEM)
{
METADATA_ADDRESS_ARRAYELEM arrayElem =
(METADATA_ADDRESS_ARRAYELEM)Marshal.PtrToStructure(dau.unionmember,
typeof(METADATA_ADDRESS_ARRAYELEM));
}
}
}
}
Configuration requise
en-tête : sh.h
l'espace de noms : Microsoft.VisualStudio.Debugger.Interop
Assembly : Microsoft.VisualStudio.Debugger.Interop.dll