Freigeben über


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

NATIVE_ADDRESS

ADDRESS_KIND_UNMANAGED_THIS_RELATIVE

UNMANAGED_ADDRESS_THIS_RELATIVE

ADDRESS_KIND_UNMANAGED_PHYSICAL

UNMANAGED_ADDRESS_PHYSICAL

ADDRESS_KIND_METHOD

METADATA_ADDRESS_METHOD

ADDRESS_KIND_FIELD

METADATA_ADDRESS_FIELD

ADDRESS_KIND_LOCAL

METADATA_ADDRESS_LOCAL

ADDRESS_KIND_PARAM

METADATA_ADDRESS_PARAM

ADDRESS_KIND_ARRAYELEM

METADATA_ADDRESS_ARRAYELEM

ADDRESS_KIND_RETVAL

METADATA_ADDRESS_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

Siehe auch

Referenz

Strukturen und Unions

DEBUG_ADDRESS

ADDRESS_KIND

IDebugAddress::GetAddress