Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Описывает различные виды адресов.
Синтаксис
Члены
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++] заполнение.
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 |
Пример
В этом примере показано, как интерпретировать один тип адреса (METADATA_ADDRESS_ARRAYELEM) структуры DEBUG_ADDRESS_UNION в C#. Остальные элементы можно интерпретировать точно так же.
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