DEBUG_ADDRESS_UNION
Describe diferentes tipos de direcciones.
Sintaxis
public struct DEBUG_ADDRESS_UNION {
public ADDRESS_KIND dwKind;
public IntPtr unionmember;
}
Miembros
dwKind
Valor de la enumeración ADDRESS_KIND, especificando cómo interpretar la unión.
addr.addrNative
[Solo C++] Contiene la estructura NATIVE_ADDRESS si dwKind
= ADDRESS_KIND_NATIVE.
addr.addrThisRel
[Solo C++] Contiene la estructura UNMANAGED_ADDRESS_THIS_RELATIVE si dwKind
= ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.
addr.addUPhysical
[Solo C++] Contiene la estructura UNMANAGED_ADDRESS_PHYSICAL si dwKind
= ADDRESS_KIND_UNMANAGED_PHYSICAL.
addr.addrMethod
[Solo C++] Contiene la estructura METADATA_ADDRESS_METHOD si dwKind
= ADDRESS_KIND_METHOD.
addr.addrField
[Solo C++] Contiene la estructura METADATA_ADDRESS_FIELD si dwKind
= ADDRESS_KIND_FIELD.
addr.addrLocal
[Solo C++] Contiene la estructura METADATA_ADDRESS_LOCAL si dwKind
= ADDRESS_KIND_LOCAL.
addr.addrParam
[Solo C++] Contiene la estructura METADATA_ADDRESS_PARAM si dwKind
= ADDRESS_KIND_PARAM.
addr.addrArrayElem
[Solo C++] Contiene la estructura METADATA_ADDRESS_ARRAYELEM si dwKind
= ADDRESS_KIND_ARRAYELEM.
addr.addrRetVal
[Solo C++] Contiene la estructura METADATA_ADDRESS_RETVAL si dwKind
= ADDRESS_KIND_RETVAL.
addr.unused
[Solo C++] relleno.
addr
[Solo C++] Nombre de la unión.
unionmember
[Solo C#] Este valor debe serializarse en el tipo de estructura adecuado basado en dwKind
. Vea comentarios sobre la asociación entre dwKind
e interpretación de la unión.
Observaciones
Esta estructura forma parte de la estructura DEBUG_ADDRESS y representa uno de varios tipos diferentes de direcciones (la estructura DEBUG_ADDRESS
se rellena mediante una llamada al método GetAddress).
[Solo C#] En la tabla siguiente se muestra cómo interpretar el miembro unionmember
para cada tipo de dirección. En el ejemplo se muestra cómo se hace esto para un tipo de dirección.
dwKind |
unionmember interpretado como |
---|---|
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 |
Ejemplo
En este ejemplo se muestra cómo interpretar un tipo de dirección (METADATA_ADDRESS_ARRAYELEM
) de la estructura DEBUG_ADDRESS_UNION
en C#. Los elementos restantes se pueden interpretar exactamente de la misma manera.
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));
}
}
}
}
Requisitos
Encabezado: sh.h
Espacio de nombres: Microsoft.VisualStudio.Debugger.Interop
Ensamblado: Microsoft.VisualStudio.Debugger.Interop.dll
Consulte también
- estructuras y uniones de
- DEBUG_ADDRESS
- ADDRESS_KIND
- GetAddress