DEBUG_ADDRESS_UNION
描述不同类型的地址。
语法
成员
dwKind
来自ADDRESS_KIND枚举的值,指定如何解释联合。
addr.addrNative
[仅限C++]包含 NATIVE_ADDRESS 结构(如果 dwKind
= ADDRESS_KIND_NATIVE)。
addr.addrThisRel
[仅限C++]如果 = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE, 则包含UNMANAGED_ADDRESS_THIS_RELATIVE 结构 dwKind
。
addr.addUPhysical
[仅限C++]如果 = ADDRESS_KIND_UNMANAGED_PHYSICAL, 则包含UNMANAGED_ADDRESS_PHYSICAL 结构 dwKind
。
addr.addrMethod
[仅限C++]如果 = ADDRESS_KIND_METHOD, 则包含METADATA_ADDRESS_METHOD 结构 dwKind
。
addr.addrField
[仅限C++]如果 = ADDRESS_KIND_FIELD, 则包含METADATA_ADDRESS_FIELD 结构 dwKind
。
addr.addrLocal
[仅限C++]如果 = ADDRESS_KIND_LOCAL, 则包含METADATA_ADDRESS_LOCAL 结构 dwKind
。
addr.addrParam
[仅限C++]包含 METADATA_ADDRESS_PARAM 结构(如果 dwKind
= ADDRESS_KIND_PARAM)。
addr.addrArrayElem
[仅限C++]如果 = ADDRESS_KIND_ARRAYELEM, 则包含METADATA_ADDRESS_ARRAYELEM 结构 dwKind
。
addr.addrRetVal
[仅限C++]如果 = ADDRESS_KIND_RETVAL, 则包含METADATA_ADDRESS_RETVAL 结构 dwKind
。
addr.unused
[仅C++] 填充。
addr
[仅限C++]联合的名称。
unionmember
[仅限 C#]此值需要根据 dwKind
相应的结构类型进行封送。 请参阅“说明”,了解联合之间的 dwKind
关联和解释。
注解
此结构是DEBUG_ADDRESS结构的一部分,表示多种不同类型的地址之一(该DEBUG_ADDRESS
结构由对 GetAddress 方法的调用填充)。
[仅限 C#]下表显示了如何解释 unionmember
每种地址的成员。 该示例演示了如何对一种地址执行此操作。
dwKind |
unionmember 解释为 |
---|---|
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 |
示例
此示例演示如何解释 C# 中结构的一种地址(METADATA_ADDRESS_ARRAYELEM
)。DEBUG_ADDRESS_UNION
其余元素可以完全相同的方式进行解释。
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));
}
}
}
}
要求
标头:sh.h
命名空间:Microsoft.VisualStudio.Debugger.Interop
程序集:Microsoft.VisualStudio.Debugger.Interop.dll