Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Opisuje różne rodzaje adresów.
Składnia
Członków
dwKind
Wartość z wyliczenia ADDRESS_KIND określająca sposób interpretowania unii.
addr.addrNative
[Tylko C++ ] Zawiera strukturę NATIVE_ADDRESS, jeśli dwKind = ADDRESS_KIND_NATIVE.
addr.addrThisRel
[Tylko C++ ] Zawiera strukturę UNMANAGED_ADDRESS_THIS_RELATIVE, jeśli dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.
addr.addUPhysical
[Tylko C++ ] Zawiera strukturę UNMANAGED_ADDRESS_PHYSICAL, jeśli dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.
addr.addrMethod
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_METHOD, jeśli dwKind = ADDRESS_KIND_METHOD.
addr.addrField
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_FIELD, jeśli dwKind = ADDRESS_KIND_FIELD.
addr.addrLocal
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_LOCAL, jeśli dwKind = ADDRESS_KIND_LOCAL.
addr.addrParam
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_PARAM, jeśli dwKind = ADDRESS_KIND_PARAM.
addr.addrArrayElem
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_ARRAYELEM, jeśli dwKind = ADDRESS_KIND_ARRAYELEM.
addr.addrRetVal
[Tylko C++ ] Zawiera strukturę METADATA_ADDRESS_RETVAL, jeśli dwKind = ADDRESS_KIND_RETVAL.
addr.unused
[Tylko C++] dopełnienie.
addr
[Tylko C++ ] Nazwa unii.
unionmember
[Tylko C# ] Ta wartość musi być marshalowana do odpowiedniego typu struktury na podstawie dwKind. Zobacz uwagi dotyczące związku między dwKind a interpretacją unii.
Uwagi
Ta struktura jest częścią struktury DEBUG_ADDRESS i reprezentuje jeden z wielu różnych rodzajów adresów (struktura DEBUG_ADDRESS jest wypełniana przez wywołanie metody GetAddress).
[Tylko C# ] W poniższej tabeli przedstawiono sposób interpretowania elementu członkowskiego unionmember 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) struktury DEBUG_ADDRESS_UNION 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