Freigeben über


DEBUG_ADDRESS_UNION

Beschreibt verschiedene Arten von Adressen.

Syntax

public struct DEBUG_ADDRESS_UNION {
   public ADDRESS_KIND dwKind;
   public IntPtr       unionmember;
}

Mitglieder

dwKind
Ein Wert aus der ADDRESS_KIND-Aufzählung , der angibt, wie die Union interpretiert werden soll.

addr.addrNative
[Nur C++] Enthält die NATIVE_ADDRESS Struktur, wenn dwKind = ADDRESS_KIND_NATIVE.

addr.addrThisRel
[Nur C++] Enthält dieUNMANAGED_ADDRESS_THIS_RELATIVE Struktur, wenn dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.

addr.addUPhysical
[Nur C++] Enthält dieUNMANAGED_ADDRESS_PHYSICAL Struktur, wenn dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.

addr.addrMethod
[Nur C++] Enthält dieMETADATA_ADDRESS_METHOD Struktur, wenn dwKind = ADDRESS_KIND_METHOD.

addr.addrField
[Nur C++] Enthält dieMETADATA_ADDRESS_FIELD Struktur, wenn dwKind = ADDRESS_KIND_FIELD.

addr.addrLocal
[Nur C++] Enthält dieMETADATA_ADDRESS_LOCAL Struktur, wenn dwKind = ADDRESS_KIND_LOCAL.

addr.addrParam
[Nur C++] Enthält dieMETADATA_ADDRESS_PARAM Struktur, wenn dwKind = ADDRESS_KIND_PARAM.

addr.addrArrayElem
[Nur C++] Enthält dieMETADATA_ADDRESS_ARRAYELEM Struktur, wenn dwKind = ADDRESS_KIND_ARRAYELEM.

addr.addrRetVal
[Nur C++] Enthält dieMETADATA_ADDRESS_RETVAL Struktur, wenn dwKind = ADDRESS_KIND_RETVAL.

addr.unused
[Nur C++]-Abstand.

addr
[Nur C++] Der Name der Vereinigung.

unionmember
[Nur C#] Dieser Wert muss basierend auf dwKinddem entsprechenden Strukturtyp gemarstet werden. Siehe Anmerkungen zur Verbindung zwischen dwKind und Auslegung der Vereinigung.

Hinweise

Diese Struktur ist Teil der DEBUG_ADDRESS Struktur und stellt eine der verschiedenen Arten von Adressen dar (die DEBUG_ADDRESS Struktur wird durch einen Aufruf der GetAddress-Methode ausgefüllt).

[Nur C#] In der folgenden Tabelle wird gezeigt, wie das unionmember Element für jede Art von Adresse interpretiert wird. Das Beispiel zeigt, wie dies für eine Art von Adresse erfolgt.

dwKind unionmember interpretiert als
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

In diesem Beispiel wird gezeigt, wie eine Art von Adresse (METADATA_ADDRESS_ARRAYELEM) der DEBUG_ADDRESS_UNION Struktur in C# interpretiert wird. Die neu Standard elemente können auf genau die gleiche Weise 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

Kopfzeile: sh.h

Namespace: Microsoft.VisualStudio.Debugger.Interop

Assembly: Microsoft.VisualStudio.Debugger.Interop.dll

Siehe auch