共用方式為


DEBUG_ADDRESS_UNION

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

說明不同類型的地址。

語法

typedef struct _tagDEBUG_ADDRESS_UNION {  
   ADDRESS_KIND dwKind;  
   union {  
      NATIVE_ADDRESS                  addrNative;  
      UNMANAGED_ADDRESS_THIS_RELATIVE addrThisRel;  
      UNMANAGED_ADDRESS_PHYSICAL      addrUPhysical;  
      METADATA_ADDRESS_METHOD         addrMethod;  
      METADATA_ADDRESS_FIELD          addrField;  
      METADATA_ADDRESS_LOCAL          addrLocal;  
      METADATA_ADDRESS_PARAM          addrParam;  
      METADATA_ADDRESS_ARRAYELEM      addrArrayElem;  
      METADATA_ADDRESS_RETVAL         addrRetVal;  
      DWORD                           unused;  
   } addr;  
} DEBUG_ADDRESS_UNION;  
public struct DEBUG_ADDRESS_UNION {  
   public ADDRESS_KIND dwKind;  
   public IntPtr       unionmember;  
}  

詞彙

dwKind
介於ADDRESS_KIND列舉,指定如何解譯聯集。

addr.addrNative
[只有 c + +]包含NATIVE_ADDRESS結構如果dwKind= ADDRESS_KIND_NATIVE。

addr.addrThisRel
[只有 c + +]包含UNMANAGED_ADDRESS_THIS_RELATIVE結構如果dwKind= ADDRESS_KIND_UNMANAGED_THIS_RELATIVE。

addr.addUPhysical
[只有 c + +]包含UNMANAGED_ADDRESS_PHYSICAL結構如果dwKind= ADDRESS_KIND_UNMANAGED_PHYSICAL。

addr.addrMethod
[只有 c + +]包含METADATA_ADDRESS_METHOD結構如果dwKind= ADDRESS_KIND_METHOD。

addr.addrField
[只有 c + +]包含METADATA_ADDRESS_FIELD結構如果dwKind= ADDRESS_KIND_FIELD。

addr.addrLocal
[只有 c + +]包含METADATA_ADDRESS_LOCAL結構如果dwKind= ADDRESS_KIND_LOCAL。

addr.addrParam
[只有 c + +]包含METADATA_ADDRESS_PARAM結構如果dwKind= ADDRESS_KIND_PARAM。

addr.addrArrayElem
[只有 c + +]包含METADATA_ADDRESS_ARRAYELEM結構如果dwKind= ADDRESS_KIND_ARRAYELEM。

addr.addrRetVal
[只有 c + +]包含METADATA_ADDRESS_RETVAL結構如果dwKind= ADDRESS_KIND_RETVAL。

addr.unused
[只有 c + +] 填補。

位址
[只有 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

範例

此範例示範如何將地址的一種 (METADATA_ADDRESS_ARRAYELEM) 的DEBUG_ADDRESS_UNIONC# 中的結構。 其餘的項目可以解譯方式完全相同。

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

另請參閱

結構和等位
DEBUG_ADDRESS
ADDRESS_KIND
GetAddress