DEBUG_ADDRESS_UNION
Opisuje różne rodzaje adresów.
Składnia
Elementy członkowskie
dwKind
Wartość z wyliczenia ADDRESS_KIND określająca sposób interpretowania unii.
addr.addrNative
[Tylko C++ ] Zawiera strukturę NATIVE_ADDRESS if dwKind
= ADDRESS_KIND_NATIVE.
addr.addrThisRel
[Tylko C++ ] Zawiera strukturę UNMANAGED_ADDRESS_THIS_RELATIVE if dwKind
= ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.
addr.addUPhysical
[Tylko C++ ] Zawiera strukturę UNMANAGED_ADDRESS_PHYSICAL if dwKind
= ADDRESS_KIND_UNMANAGED_PHYSICAL.
addr.addrMethod
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_METHOD if dwKind
= ADDRESS_KIND_METHOD.
addr.addrField
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_FIELD if dwKind
= ADDRESS_KIND_FIELD.
addr.addrLocal
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_LOCAL if dwKind
= ADDRESS_KIND_LOCAL.
addr.addrParam
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_PARAM if dwKind
= ADDRESS_KIND_PARAM.
addr.addrArrayElem
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_ARRAYELEM if dwKind
= ADDRESS_KIND_ARRAYELEM.
addr.addrRetVal
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_RETVAL if dwKind
= ADDRESS_KIND_RETVAL.
addr.unused
[Tylko C++] dopełnienie.
addr
[Tylko C++ ] Nazwa unii.
unionmember
[Tylko C# ] Ta wartość musi być przesłana do odpowiedniego typu struktury na dwKind
podstawie . Zobacz uwagi dotyczące związku między dwKind
i interpretacją związku.
Uwagi
Ta struktura jest częścią struktury DEBUG_ADDRESS i reprezentuje jeden z wielu różnych rodzajów adresów ( DEBUG_ADDRESS
struktura jest wypełniana przez wywołanie metody GetAddress ).
[Tylko C# ] W poniższej tabeli przedstawiono sposób interpretowania unionmember
elementu członkowskiego dla każdego rodzaju adresu. W przykładzie pokazano, jak to zrobić dla jednego rodzaju adresu.
dwKind |
unionmember interpretowane jako |
---|---|
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 |
Przykład
W tym przykładzie pokazano, jak interpretować jeden rodzaj adresu (METADATA_ADDRESS_ARRAYELEM
) DEBUG_ADDRESS_UNION
struktury w języku C#. Pozostałe elementy można interpretować w taki sam sposób.
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));
}
}
}
}
Wymagania
Nagłówek: sh.h
Przestrzeń nazw: Microsoft.VisualStudio.Debugger.Interop
Zestaw: Microsoft.VisualStudio.Debugger.Interop.dll