さまざまな種類のアドレスについて説明します。
構文
public struct DEBUG_ADDRESS_UNION {
public ADDRESS_KIND dwKind;
public IntPtr unionmember;
}
メンバーズ
dwKind
共用体の解釈方法を指定する、ADDRESS_KIND 列挙体の値。
addr.addrNative
[C++ のみ]dwKind
= ADDRESS_KIND_NATIVEの場合、NATIVE_ADDRESS 構造体を格納します。
addr.addrThisRel
[C++ のみ]dwKind
= ADDRESS_KIND_UNMANAGED_THIS_RELATIVE の場合、UNMANAGED_ADDRESS_THIS_RELATIVE 構造体を格納します。
addr.addUPhysical
[C++ のみ]dwKind
= ADDRESS_KIND_UNMANAGED_PHYSICALの場合は、UNMANAGED_ADDRESS_PHYSICAL 構造体を格納します。
addr.addrMethod
[C++ のみ]dwKind
= ADDRESS_KIND_METHODの場合、METADATA_ADDRESS_METHOD 構造体を格納します。
addr.addrField
[C++ のみ]dwKind
= ADDRESS_KIND_FIELDの場合は、METADATA_ADDRESS_FIELD 構造体を格納します。
addr.addrLocal
[C++ のみ]dwKind
= ADDRESS_KIND_LOCAL の場合、METADATA_ADDRESS_LOCAL 構造体を格納します。
addr.addrParam
[C++ のみ]dwKind
= ADDRESS_KIND_PARAM の場合、METADATA_ADDRESS_PARAM 構造体を格納します。
addr.addrArrayElem
[C++ のみ]dwKind
= ADDRESS_KIND_ARRAYELEM の場合、METADATA_ADDRESS_ARRAYELEM 構造体を格納します。
addr.addrRetVal
[C++ のみ]dwKind
= ADDRESS_KIND_RETVALの場合は、METADATA_ADDRESS_RETVAL 構造体を格納します。
addr.unused
[C++ のみ] パディング。
addr
[C++ のみ]共用体の名前。
unionmember
[C# のみ]この値は、dwKind
に基づいて適切な構造体型にマーシャリングする必要があります。 和集合の dwKind
と解釈の関連については、「解説」を参照してください。
備考
この構造体は、DEBUG_ADDRESS 構造体の一部であり、さまざまな種類のアドレスの 1 つを表します (DEBUG_ADDRESS
構造体は、GetAddress メソッドの呼び出しによって入力されます)。
[C# のみ]次の表は、アドレスの種類ごとに unionmember
メンバーを解釈する方法を示しています。 この例では、1 種類のアドレスに対してこれを行う方法を示します。
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# の DEBUG_ADDRESS_UNION
構造体の 1 種類のアドレス (METADATA_ADDRESS_ARRAYELEM
) を解釈する方法を示します。 残りの要素は、まったく同じ方法で解釈できます。
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 の