Compartilhar via


DEBUG_ADDRESS_UNION

Descreve diferentes tipos de endereços.

Sintaxe

public struct DEBUG_ADDRESS_UNION {
   public ADDRESS_KIND dwKind;
   public IntPtr       unionmember;
}

Membros

dwKind
Um valor da enumeração ADDRESS_KIND, especificando como interpretar a união.

addr.addrNative
[Somente C++] Contém a estrutura NATIVE_ADDRESS se dwKind = ADDRESS_KIND_NATIVE.

addr.addrThisRel
[Somente C++] Contém a estrutura UNMANAGED_ADDRESS_THIS_RELATIVE se dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.

addr.addUPhysical
[Somente C++] Contém a estrutura UNMANAGED_ADDRESS_PHYSICAL se dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.

addr.addrMethod
[Somente C++] Contém a estrutura METADATA_ADDRESS_METHOD se dwKind = ADDRESS_KIND_METHOD.

addr.addrField
[Somente C++] Contém a estrutura METADATA_ADDRESS_FIELD se dwKind = ADDRESS_KIND_FIELD.

addr.addrLocal
[Somente C++] Contém a estrutura de METADATA_ADDRESS_LOCAL se dwKind = ADDRESS_KIND_LOCAL.

addr.addrParam
[Somente C++] Contém a estrutura de METADATA_ADDRESS_PARAM se dwKind = ADDRESS_KIND_PARAM.

addr.addrArrayElem
[Somente C++] Contém a estrutura METADATA_ADDRESS_ARRAYELEM se dwKind = ADDRESS_KIND_ARRAYELEM.

addr.addrRetVal
[Somente C++] Contém a estrutura de METADATA_ADDRESS_RETVAL se dwKind = ADDRESS_KIND_RETVAL.

addr.unused
[Somente C++] preenchimento.

addr
[Somente C++] O nome do sindicato.

unionmember
[Somente C#] Esse valor precisa ser empacotado para o tipo de estrutura apropriado com base em dwKind. Consulte Comentários para a associação entre dwKind e interpretação do sindicato.

Observações

Essa estrutura faz parte da estrutura DEBUG_ADDRESS e representa um dos vários tipos diferentes de endereços (a estrutura de DEBUG_ADDRESS é preenchida por uma chamada ao método GetAddress).

[Somente C#] A tabela a seguir mostra como interpretar o membro unionmember para cada tipo de endereço. O exemplo mostra como isso é feito para um tipo de endereço.

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

Exemplo

Este exemplo mostra como interpretar um tipo de endereço (METADATA_ADDRESS_ARRAYELEM) da estrutura de DEBUG_ADDRESS_UNION em C#. Os elementos restantes podem ser interpretados exatamente da mesma maneira.

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

Cabeçalho: sh.h

Namespace: Microsoft.VisualStudio.Debugger.Interop

Assembly: Microsoft.VisualStudio.Debugger.Interop.dll

Consulte também