Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menjelaskan berbagai jenis alamat.
Sintaksis
- C#
- C++
public struct DEBUG_ADDRESS_UNION {
public ADDRESS_KIND dwKind;
public IntPtr unionmember;
}
Anggota
dwKind
Nilai dari enumerasi ADDRESS_KIND, menentukan cara menginterpretasikan penyatuan.
addr.addrNative
[Hanya C++] Berisi struktur NATIVE_ADDRESS jika dwKind = ADDRESS_KIND_NATIVE.
addr.addrThisRel
[Hanya C++] Berisi struktur UNMANAGED_ADDRESS_THIS_RELATIVE jika dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.
addr.addUPhysical
[Hanya C++] Berisi struktur UNMANAGED_ADDRESS_PHYSICAL jika dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.
addr.addrMethod
[Hanya C++] Berisi struktur METADATA_ADDRESS_METHOD jika dwKind = ADDRESS_KIND_METHOD.
addr.addrField
[Hanya C++] Berisi struktur METADATA_ADDRESS_FIELD jika dwKind = ADDRESS_KIND_FIELD.
addr.addrLocal
[Hanya C++] Berisi struktur METADATA_ADDRESS_LOCAL jika dwKind = ADDRESS_KIND_LOCAL.
addr.addrParam
[Hanya C++] Berisi struktur METADATA_ADDRESS_PARAM jika dwKind = ADDRESS_KIND_PARAM.
addr.addrArrayElem
[Hanya C++] Berisi struktur METADATA_ADDRESS_ARRAYELEM jika dwKind = ADDRESS_KIND_ARRAYELEM.
addr.addrRetVal
[Hanya C++] Berisi struktur METADATA_ADDRESS_RETVAL jika dwKind = ADDRESS_KIND_RETVAL.
addr.unused
[Hanya C++] padding.
addr
[Hanya C++] Nama serikat.
unionmember
[C# saja] Nilai ini perlu dinaikkan ke jenis struktur yang sesuai berdasarkan dwKind. Lihat Keterangan untuk hubungan antara dwKind dan interpretasi serikat.
Komentar
Struktur ini adalah bagian dari struktur DEBUG_ADDRESS dan mewakili salah satu dari sejumlah jenis alamat yang berbeda (struktur DEBUG_ADDRESS diisi oleh panggilan ke metode GetAddress).
[C# saja] Tabel berikut ini memperlihatkan cara menginterpretasikan anggota unionmember untuk setiap jenis alamat. Contoh menunjukkan bagaimana hal ini dilakukan untuk satu jenis alamat.
dwKind |
unionmember ditafsirkan sebagai |
|---|---|
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 |
Contoh
Contoh ini menunjukkan cara menginterpretasikan satu jenis alamat (METADATA_ADDRESS_ARRAYELEM) dari struktur DEBUG_ADDRESS_UNION di C#. Elemen yang tersisa dapat ditafsirkan dengan cara yang sama persis.
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));
}
}
}
}
Persyaratan
Header: sh.h
Namespace: Microsoft.VisualStudio.Debugger.Interop
Rakitan: Microsoft.VisualStudio.Debugger.Interop.dll