Win32 API 日本語リファレンス
ホームSystem.Diagnostics.Debug › DebugPropertyInfo

DebugPropertyInfo

構造体
サイズx64: 56 バイト / x86: 28 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
m_dwValidFieldsDWORD4+0+0どのフィールドが有効かを示すビットマスク(DBGPROP_INFO_*)を示す。
m_bstrNameLPWSTR8/4+8+4プロパティ名を示す BSTR 文字列。
m_bstrTypeLPWSTR8/4+16+8プロパティの型名を示す BSTR 文字列。
m_bstrValueLPWSTR8/4+24+12プロパティの値を文字列化した BSTR を示す。
m_bstrFullNameLPWSTR8/4+32+16プロパティの完全修飾名を示す BSTR 文字列。
m_dwAttribDWORD4+40+20プロパティの属性フラグ(読取専用/展開可能等)を示す。
m_pDebugPropIDebugProperty*8/4+48+24対応する IDebugProperty インターフェイスへのポインタ。

各言語での定義

#include <windows.h>

// DebugPropertyInfo  (x64 56 / x86 28 バイト)
typedef struct DebugPropertyInfo {
    DWORD m_dwValidFields;
    LPWSTR m_bstrName;
    LPWSTR m_bstrType;
    LPWSTR m_bstrValue;
    LPWSTR m_bstrFullName;
    DWORD m_dwAttrib;
    IDebugProperty* m_pDebugProp;
} DebugPropertyInfo;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DebugPropertyInfo
{
    public uint m_dwValidFields;
    public IntPtr m_bstrName;
    public IntPtr m_bstrType;
    public IntPtr m_bstrValue;
    public IntPtr m_bstrFullName;
    public uint m_dwAttrib;
    public IntPtr m_pDebugProp;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DebugPropertyInfo
    Public m_dwValidFields As UInteger
    Public m_bstrName As IntPtr
    Public m_bstrType As IntPtr
    Public m_bstrValue As IntPtr
    Public m_bstrFullName As IntPtr
    Public m_dwAttrib As UInteger
    Public m_pDebugProp As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class DebugPropertyInfo(ctypes.Structure):
    _fields_ = [
        ("m_dwValidFields", wintypes.DWORD),
        ("m_bstrName", ctypes.c_void_p),
        ("m_bstrType", ctypes.c_void_p),
        ("m_bstrValue", ctypes.c_void_p),
        ("m_bstrFullName", ctypes.c_void_p),
        ("m_dwAttrib", wintypes.DWORD),
        ("m_pDebugProp", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct DebugPropertyInfo {
    pub m_dwValidFields: u32,
    pub m_bstrName: *mut core::ffi::c_void,
    pub m_bstrType: *mut core::ffi::c_void,
    pub m_bstrValue: *mut core::ffi::c_void,
    pub m_bstrFullName: *mut core::ffi::c_void,
    pub m_dwAttrib: u32,
    pub m_pDebugProp: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type DebugPropertyInfo struct {
	m_dwValidFields uint32
	m_bstrName uintptr
	m_bstrType uintptr
	m_bstrValue uintptr
	m_bstrFullName uintptr
	m_dwAttrib uint32
	m_pDebugProp uintptr
}
type
  DebugPropertyInfo = record
    m_dwValidFields: DWORD;
    m_bstrName: Pointer;
    m_bstrType: Pointer;
    m_bstrValue: Pointer;
    m_bstrFullName: Pointer;
    m_dwAttrib: DWORD;
    m_pDebugProp: Pointer;
  end;
const DebugPropertyInfo = extern struct {
    m_dwValidFields: u32,
    m_bstrName: ?*anyopaque,
    m_bstrType: ?*anyopaque,
    m_bstrValue: ?*anyopaque,
    m_bstrFullName: ?*anyopaque,
    m_dwAttrib: u32,
    m_pDebugProp: ?*anyopaque,
};
type
  DebugPropertyInfo {.bycopy.} = object
    m_dwValidFields: uint32
    m_bstrName: pointer
    m_bstrType: pointer
    m_bstrValue: pointer
    m_bstrFullName: pointer
    m_dwAttrib: uint32
    m_pDebugProp: pointer
struct DebugPropertyInfo
{
    uint m_dwValidFields;
    void* m_bstrName;
    void* m_bstrType;
    void* m_bstrValue;
    void* m_bstrFullName;
    uint m_dwAttrib;
    void* m_pDebugProp;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DebugPropertyInfo サイズ: 28 バイト(x86)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; m_dwValidFields : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; m_bstrName : LPWSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; m_bstrType : LPWSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; m_bstrValue : LPWSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; m_bstrFullName : LPWSTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; m_dwAttrib : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; m_pDebugProp : IDebugProperty* (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DebugPropertyInfo サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; m_dwValidFields : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; m_bstrName : LPWSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; m_bstrType : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; m_bstrValue : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; m_bstrFullName : LPWSTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; m_dwAttrib : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; m_pDebugProp : IDebugProperty* (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DebugPropertyInfo
    #field int m_dwValidFields
    #field intptr m_bstrName
    #field intptr m_bstrType
    #field intptr m_bstrValue
    #field intptr m_bstrFullName
    #field int m_dwAttrib
    #field intptr m_pDebugProp
#endstruct

stdim st, DebugPropertyInfo        ; NSTRUCT 変数を確保
st->m_dwValidFields = 100
mes "m_dwValidFields=" + st->m_dwValidFields