ホーム › System.Diagnostics.Debug.ActiveScript › JsDebugPropertyInfo
JsDebugPropertyInfo
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| name | LPWSTR | 8/4 | +0 | +0 | プロパティ名を表すワイド文字列。 |
| type | LPWSTR | 8/4 | +8 | +4 | プロパティの型名を表すワイド文字列。 |
| value | LPWSTR | 8/4 | +16 | +8 | プロパティ値の文字列表現(ワイド文字列)。 |
| fullName | LPWSTR | 8/4 | +24 | +12 | プロパティの完全修飾名を表すワイド文字列。 |
| attr | JS_PROPERTY_ATTRIBUTES | 4 | +32 | +16 | プロパティの属性(JS_PROPERTY_ATTRIBUTES:読取専用等)を示す。 |
各言語での定義
#include <windows.h>
// JsDebugPropertyInfo (x64 40 / x86 20 バイト)
typedef struct JsDebugPropertyInfo {
LPWSTR name;
LPWSTR type;
LPWSTR value;
LPWSTR fullName;
JS_PROPERTY_ATTRIBUTES attr;
} JsDebugPropertyInfo;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct JsDebugPropertyInfo
{
public IntPtr name;
public IntPtr type;
public IntPtr value;
public IntPtr fullName;
public int attr;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure JsDebugPropertyInfo
Public name As IntPtr
Public type As IntPtr
Public value As IntPtr
Public fullName As IntPtr
Public attr As Integer
End Structureimport ctypes
from ctypes import wintypes
class JsDebugPropertyInfo(ctypes.Structure):
_fields_ = [
("name", ctypes.c_void_p),
("type", ctypes.c_void_p),
("value", ctypes.c_void_p),
("fullName", ctypes.c_void_p),
("attr", ctypes.c_int),
]#[repr(C)]
pub struct JsDebugPropertyInfo {
pub name: *mut core::ffi::c_void,
pub type: *mut core::ffi::c_void,
pub value: *mut core::ffi::c_void,
pub fullName: *mut core::ffi::c_void,
pub attr: i32,
}import "golang.org/x/sys/windows"
type JsDebugPropertyInfo struct {
name uintptr
type uintptr
value uintptr
fullName uintptr
attr int32
}type
JsDebugPropertyInfo = record
name: Pointer;
type: Pointer;
value: Pointer;
fullName: Pointer;
attr: Integer;
end;const JsDebugPropertyInfo = extern struct {
name: ?*anyopaque,
type: ?*anyopaque,
value: ?*anyopaque,
fullName: ?*anyopaque,
attr: i32,
};type
JsDebugPropertyInfo {.bycopy.} = object
name: pointer
type: pointer
value: pointer
fullName: pointer
attr: int32struct JsDebugPropertyInfo
{
void* name;
void* type;
void* value;
void* fullName;
int attr;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; JsDebugPropertyInfo サイズ: 20 バイト(x86)
dim st, 5 ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; name : LPWSTR (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; type : LPWSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; value : LPWSTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; fullName : LPWSTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; attr : JS_PROPERTY_ATTRIBUTES (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; JsDebugPropertyInfo サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; name : LPWSTR (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; type : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; value : LPWSTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; fullName : LPWSTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; attr : JS_PROPERTY_ATTRIBUTES (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global JsDebugPropertyInfo
#field intptr name
#field intptr type
#field intptr value
#field intptr fullName
#field int attr
#endstruct
stdim st, JsDebugPropertyInfo ; NSTRUCT 変数を確保
st->attr = 100
mes "attr=" + st->attr