DEBUG_ADDRESS_UNION
Beschreibt verschiedene Arten von Adressen.
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;
}
Ausdrücke
dwKind
Ein Wert aus der ADDRESS_KIND-Enumeration, die angibt, wie die Gesamtmenge interpretiert.addr.addrNative
[C++] Es enthält die NATIVE_ADDRESS Struktur wenn dwKind = ADDRESS_KIND_NATIVE.addr.addrThisRel
[C++] Es enthält dieUNMANAGED_ADDRESS_THIS_RELATIVE Struktur wenn dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.addr.addUPhysical
[C++] Es enthält dieUNMANAGED_ADDRESS_PHYSICAL Struktur wenn dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.addr.addrMethod
[C++] Es enthält dieMETADATA_ADDRESS_METHOD Struktur wenn dwKind = ADDRESS_KIND_METHOD.addr.addrField
[C++] Es enthält dieMETADATA_ADDRESS_FIELD Struktur wenn dwKind = ADDRESS_KIND_FIELD.addr.addrLocal
[C++] Es enthält dieMETADATA_ADDRESS_LOCAL Struktur wenn dwKind = ADDRESS_KIND_LOCAL.addr.addrParam
[C++] Es enthält dieMETADATA_ADDRESS_PARAM Struktur wenn dwKind = ADDRESS_KIND_PARAM.addr.addrArrayElem
[C++] Es enthält dieMETADATA_ADDRESS_ARRAYELEM Struktur wenn dwKind = ADDRESS_KIND_ARRAYELEM.addr.addrRetVal
[C++] Es enthält dieMETADATA_ADDRESS_RETVAL Struktur wenn dwKind = ADDRESS_KIND_RETVAL.addr.unused
[C++] Nur auffüllen.Adr
[C++] Es wird nur der Name der Union.unionmember
[Nur C#] muss dieser Wert in den entsprechenden Strukturtyp auf Grundlage dwKindgemarshallt werden. Siehe Hinweise für die Zuordnung zwischen dwKind und Interpretation der Union.
Hinweise
Diese Struktur ist Teil der DEBUG_ADDRESS Struktur und stellt eine von mehreren unterschiedlichen Arten von Adressen dar (die DEBUG_ADDRESS Struktur wird von einem Aufruf der IDebugAddress::GetAddress-Methode gefüllt).
[C#] zeigt nur die folgende Tabelle veranschaulicht, wie der unionmember-Member für jede Art Adresse interpretiert. Im Beispiel wird gezeigt, wie dies für eine Weise Adresse.
dwKind |
unionmember wie interpretierte |
---|---|
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 |
Beispiel
Dieses Beispiel zeigt, wie eine Adresse (METADATA_ADDRESS_ARRAYELEM) der DEBUG_ADDRESS_UNION Struktur in C# interpretiert. Die übrigen Elemente können auf genau die gleiche Art interpretiert werden.
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));
}
}
}
}
Anforderungen
Header: sh.h
Namespace: Microsoft.VisualStudio.Debugger.Interop
Assembly: Microsoft.VisualStudio.Debugger.Interop.dll