DEBUG_ADDRESS_UNION
Popisuje různé druhy adres.
Syntax
- jazyka C# jazyka C#
- jazyka C++
public struct DEBUG_ADDRESS_UNION {
public ADDRESS_KIND dwKind;
public IntPtr unionmember;
}
Členové
dwKind
Hodnota z ADDRESS_KIND výčtu určující, jak interpretovat sjednocení.
addr.addrNative
[Pouze C++] Obsahuje strukturu NATIVE_ADDRESS, pokud dwKind
= ADDRESS_KIND_NATIVE.
addr.addrThisRel
[Pouze C++] Obsahuje strukturu UNMANAGED_ADDRESS_THIS_RELATIVE, pokud dwKind
= ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.
addr.addUPhysical
[Pouze C++] Obsahuje strukturu UNMANAGED_ADDRESS_PHYSICAL, pokud dwKind
= ADDRESS_KIND_UNMANAGED_PHYSICAL.
addr.addrMethod
[Pouze C++] Obsahuje strukturu METADATA_ADDRESS_METHOD, pokud dwKind
= ADDRESS_KIND_METHOD.
addr.addrField
[Pouze C++] Obsahuje strukturu METADATA_ADDRESS_FIELD, pokud dwKind
= ADDRESS_KIND_FIELD.
addr.addrLocal
[Pouze C++] Obsahuje strukturu METADATA_ADDRESS_LOCAL, pokud dwKind
= ADDRESS_KIND_LOCAL.
addr.addrParam
[Pouze C++] Obsahuje strukturu METADATA_ADDRESS_PARAM, pokud dwKind
= ADDRESS_KIND_PARAM.
addr.addrArrayElem
[Pouze C++] Obsahuje strukturu METADATA_ADDRESS_ARRAYELEM, pokud dwKind
= ADDRESS_KIND_ARRAYELEM.
addr.addrRetVal
[Pouze C++] Obsahuje strukturu METADATA_ADDRESS_RETVAL, pokud dwKind
= ADDRESS_KIND_RETVAL.
addr.unused
[Pouze C++] odsazení.
addr
[Pouze C++] Název sjednocení.
unionmember
[Jenom jazyk C#] Tato hodnota musí být zařazována do příslušného typu struktury na základě dwKind
. Viz poznámky k přidružení mezi dwKind
a výkladem unie.
Poznámky
Tato struktura je součástí struktury DEBUG_ADDRESS a představuje jeden z mnoha různých typů adres (struktura DEBUG_ADDRESS
je vyplněna voláním metody GetAddress).
[Jenom jazyk C#] Následující tabulka ukazuje, jak interpretovat unionmember
člena pro každý druh adresy. Příklad ukazuje, jak se to dělá pro jeden druh adresy.
dwKind |
unionmember interpretováno 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 |
Příklad
Tento příklad ukazuje, jak interpretovat jeden druh adresy (METADATA_ADDRESS_ARRAYELEM
) struktury DEBUG_ADDRESS_UNION
v jazyce C#. Zbývající prvky lze interpretovat úplně stejným způsobem.
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));
}
}
}
}
Požadavky
Hlavička: sh.h
Obor názvů: Microsoft.VisualStudio.Debugger.Interop
Sestavení: Microsoft.VisualStudio.Debugger.Interop.dll