Win32 API 日本語リファレンス
ホームGraphics.DirectDraw › DDRAWI_DDRAWSURFACE_LCL

DDRAWI_DDRAWSURFACE_LCL

構造体
サイズx64: 216 バイト / x86: 160 バイト

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

フィールド

フィールドサイズx64x86説明
lpSurfMoreDDRAWI_DDRAWSURFACE_MORE*8/4+0+0サーフェスの拡張情報(DDRAWI_DDRAWSURFACE_MORE)へのポインタ。
lpGblDDRAWI_DDRAWSURFACE_GBL*8/4+8+4対応するグローバルサーフェスオブジェクトへのポインタ。
hDDSurfaceUINT_PTR8/4+16+8ドライバが用いるサーフェスハンドルを示す。
lpAttachListATTACHLIST*8/4+24+12このサーフェスに付属するサーフェスのリストへのポインタ。
lpAttachListFromATTACHLIST*8/4+32+16このサーフェスが付属している側のリストへのポインタ。
dwLocalRefCntDWORD4+40+20ローカルサーフェスオブジェクトの参照カウントを示す。
dwProcessIdDWORD4+44+24このサーフェスを所有するプロセスの識別子を示す。
dwFlagsDWORD4+48+28サーフェスのローカル属性を示すDDRAWISURF_系フラグ。
ddsCapsDDSCAPS4+52+32サーフェスの能力/種別(DDSCAPS)。
Anonymous1_Anonymous1_e__Union8/4+56+36対応するグローバルオブジェクト(GBL/MORE)を保持する共用体。
Anonymous2_Anonymous2_e__Union8/4+64+40クリッパーオブジェクトまたはエイリアスを保持する共用体。
dwModeCreatedInDWORD4+72+44サーフェス作成時のディスプレイモードを示す。
dwBackBufferCountDWORD4+76+48フリップチェーンのバックバッファ数を示す。
ddckCKDestBltDDCOLORKEY8+80+52転送先Blt用カラーキー(DDCOLORKEY)。
ddckCKSrcBltDDCOLORKEY8+88+60転送元Blt用カラーキー(DDCOLORKEY)。
hDCUINT_PTR8/4+96+68サーフェスに関連付けられたデバイスコンテキストハンドルを示す。
dwReserved1UINT_PTR8/4+104+72予約フィールド。0とする。
ddckCKSrcOverlayDDCOLORKEY8+112+76転送元オーバーレイ用カラーキー(DDCOLORKEY)。
ddckCKDestOverlayDDCOLORKEY8+120+84転送先オーバーレイ用カラーキー(DDCOLORKEY)。
lpSurfaceOverlayingDDRAWI_DDRAWSURFACE_INT*8/4+128+92このサーフェスが重ねて表示している対象サーフェスへのポインタ。
dbnOverlayNodeDBLNODE32/16+136+96オーバーレイ管理用の双方向リストノード(DBLNODE)。
rcOverlaySrcRECT16+168+112オーバーレイの転送元矩形(RECT)を示す。
rcOverlayDestRECT16+184+128オーバーレイの転送先矩形(RECT)を示す。
dwClrXparentDWORD4+200+144透過色として扱う色値を示す。
dwAlphaDWORD4+204+148オーバーレイに適用するアルファ値を示す。
lOverlayXINT4+208+152オーバーレイの表示X座標を示す。
lOverlayYINT4+212+156オーバーレイの表示Y座標を示す。

共用体: _Anonymous1_e__Union x64 8B / x86 4B

フィールドサイズx64x86
lpDDPaletteDDRAWI_DDRAWPALETTE_INT*8/4+0+0
lp16DDPaletteDDRAWI_DDRAWPALETTE_INT*8/4+0+0

共用体: _Anonymous2_e__Union x64 8B / x86 4B

フィールドサイズx64x86
lpDDClipperDDRAWI_DDRAWCLIPPER_LCL*8/4+0+0
lp16DDClipperDDRAWI_DDRAWCLIPPER_INT*8/4+0+0

各言語での定義

#include <windows.h>

// DDSCAPS  (x64 4 / x86 4 バイト)
typedef struct DDSCAPS {
    DWORD dwCaps;
} DDSCAPS;

// DDCOLORKEY  (x64 8 / x86 8 バイト)
typedef struct DDCOLORKEY {
    DWORD dwColorSpaceLowValue;
    DWORD dwColorSpaceHighValue;
} DDCOLORKEY;

// DBLNODE  (x64 32 / x86 16 バイト)
typedef struct DBLNODE {
    DBLNODE* next;
    DBLNODE* prev;
    DDRAWI_DDRAWSURFACE_LCL* object;
    DDRAWI_DDRAWSURFACE_INT* object_int;
} DBLNODE;

// RECT  (x64 16 / x86 16 バイト)
typedef struct RECT {
    INT left;
    INT top;
    INT right;
    INT bottom;
} RECT;

// DDRAWI_DDRAWSURFACE_LCL  (x64 216 / x86 160 バイト)
typedef struct DDRAWI_DDRAWSURFACE_LCL {
    DDRAWI_DDRAWSURFACE_MORE* lpSurfMore;
    DDRAWI_DDRAWSURFACE_GBL* lpGbl;
    UINT_PTR hDDSurface;
    ATTACHLIST* lpAttachList;
    ATTACHLIST* lpAttachListFrom;
    DWORD dwLocalRefCnt;
    DWORD dwProcessId;
    DWORD dwFlags;
    DDSCAPS ddsCaps;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    DWORD dwModeCreatedIn;
    DWORD dwBackBufferCount;
    DDCOLORKEY ddckCKDestBlt;
    DDCOLORKEY ddckCKSrcBlt;
    UINT_PTR hDC;
    UINT_PTR dwReserved1;
    DDCOLORKEY ddckCKSrcOverlay;
    DDCOLORKEY ddckCKDestOverlay;
    DDRAWI_DDRAWSURFACE_INT* lpSurfaceOverlaying;
    DBLNODE dbnOverlayNode;
    RECT rcOverlaySrc;
    RECT rcOverlayDest;
    DWORD dwClrXparent;
    DWORD dwAlpha;
    INT lOverlayX;
    INT lOverlayY;
} DDRAWI_DDRAWSURFACE_LCL;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDSCAPS
{
    public uint dwCaps;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDCOLORKEY
{
    public uint dwColorSpaceLowValue;
    public uint dwColorSpaceHighValue;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DBLNODE
{
    public IntPtr next;
    public IntPtr prev;
    public IntPtr object;
    public IntPtr object_int;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RECT
{
    public int left;
    public int top;
    public int right;
    public int bottom;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDRAWI_DDRAWSURFACE_LCL
{
    public IntPtr lpSurfMore;
    public IntPtr lpGbl;
    public UIntPtr hDDSurface;
    public IntPtr lpAttachList;
    public IntPtr lpAttachListFrom;
    public uint dwLocalRefCnt;
    public uint dwProcessId;
    public uint dwFlags;
    public DDSCAPS ddsCaps;
    public _Anonymous1_e__Union Anonymous1;
    public _Anonymous2_e__Union Anonymous2;
    public uint dwModeCreatedIn;
    public uint dwBackBufferCount;
    public DDCOLORKEY ddckCKDestBlt;
    public DDCOLORKEY ddckCKSrcBlt;
    public UIntPtr hDC;
    public UIntPtr dwReserved1;
    public DDCOLORKEY ddckCKSrcOverlay;
    public DDCOLORKEY ddckCKDestOverlay;
    public IntPtr lpSurfaceOverlaying;
    public DBLNODE dbnOverlayNode;
    public RECT rcOverlaySrc;
    public RECT rcOverlayDest;
    public uint dwClrXparent;
    public uint dwAlpha;
    public int lOverlayX;
    public int lOverlayY;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDSCAPS
    Public dwCaps As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDCOLORKEY
    Public dwColorSpaceLowValue As UInteger
    Public dwColorSpaceHighValue As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DBLNODE
    Public next As IntPtr
    Public prev As IntPtr
    Public object As IntPtr
    Public object_int As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RECT
    Public left As Integer
    Public top As Integer
    Public right As Integer
    Public bottom As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDRAWI_DDRAWSURFACE_LCL
    Public lpSurfMore As IntPtr
    Public lpGbl As IntPtr
    Public hDDSurface As UIntPtr
    Public lpAttachList As IntPtr
    Public lpAttachListFrom As IntPtr
    Public dwLocalRefCnt As UInteger
    Public dwProcessId As UInteger
    Public dwFlags As UInteger
    Public ddsCaps As DDSCAPS
    Public Anonymous1 As _Anonymous1_e__Union
    Public Anonymous2 As _Anonymous2_e__Union
    Public dwModeCreatedIn As UInteger
    Public dwBackBufferCount As UInteger
    Public ddckCKDestBlt As DDCOLORKEY
    Public ddckCKSrcBlt As DDCOLORKEY
    Public hDC As UIntPtr
    Public dwReserved1 As UIntPtr
    Public ddckCKSrcOverlay As DDCOLORKEY
    Public ddckCKDestOverlay As DDCOLORKEY
    Public lpSurfaceOverlaying As IntPtr
    Public dbnOverlayNode As DBLNODE
    Public rcOverlaySrc As RECT
    Public rcOverlayDest As RECT
    Public dwClrXparent As UInteger
    Public dwAlpha As UInteger
    Public lOverlayX As Integer
    Public lOverlayY As Integer
End Structure
import ctypes
from ctypes import wintypes

class DDSCAPS(ctypes.Structure):
    _fields_ = [
        ("dwCaps", wintypes.DWORD),
    ]

class DDCOLORKEY(ctypes.Structure):
    _fields_ = [
        ("dwColorSpaceLowValue", wintypes.DWORD),
        ("dwColorSpaceHighValue", wintypes.DWORD),
    ]

class DBLNODE(ctypes.Structure):
    _fields_ = [
        ("next", ctypes.c_void_p),
        ("prev", ctypes.c_void_p),
        ("object", ctypes.c_void_p),
        ("object_int", ctypes.c_void_p),
    ]

class RECT(ctypes.Structure):
    _fields_ = [
        ("left", ctypes.c_int),
        ("top", ctypes.c_int),
        ("right", ctypes.c_int),
        ("bottom", ctypes.c_int),
    ]

class DDRAWI_DDRAWSURFACE_LCL(ctypes.Structure):
    _fields_ = [
        ("lpSurfMore", ctypes.c_void_p),
        ("lpGbl", ctypes.c_void_p),
        ("hDDSurface", ctypes.c_size_t),
        ("lpAttachList", ctypes.c_void_p),
        ("lpAttachListFrom", ctypes.c_void_p),
        ("dwLocalRefCnt", wintypes.DWORD),
        ("dwProcessId", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("ddsCaps", DDSCAPS),
        ("Anonymous1", _Anonymous1_e__Union),
        ("Anonymous2", _Anonymous2_e__Union),
        ("dwModeCreatedIn", wintypes.DWORD),
        ("dwBackBufferCount", wintypes.DWORD),
        ("ddckCKDestBlt", DDCOLORKEY),
        ("ddckCKSrcBlt", DDCOLORKEY),
        ("hDC", ctypes.c_size_t),
        ("dwReserved1", ctypes.c_size_t),
        ("ddckCKSrcOverlay", DDCOLORKEY),
        ("ddckCKDestOverlay", DDCOLORKEY),
        ("lpSurfaceOverlaying", ctypes.c_void_p),
        ("dbnOverlayNode", DBLNODE),
        ("rcOverlaySrc", RECT),
        ("rcOverlayDest", RECT),
        ("dwClrXparent", wintypes.DWORD),
        ("dwAlpha", wintypes.DWORD),
        ("lOverlayX", ctypes.c_int),
        ("lOverlayY", ctypes.c_int),
    ]
#[repr(C)]
pub struct DDSCAPS {
    pub dwCaps: u32,
}

#[repr(C)]
pub struct DDCOLORKEY {
    pub dwColorSpaceLowValue: u32,
    pub dwColorSpaceHighValue: u32,
}

#[repr(C)]
pub struct DBLNODE {
    pub next: *mut core::ffi::c_void,
    pub prev: *mut core::ffi::c_void,
    pub object: *mut core::ffi::c_void,
    pub object_int: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct RECT {
    pub left: i32,
    pub top: i32,
    pub right: i32,
    pub bottom: i32,
}

#[repr(C)]
pub struct DDRAWI_DDRAWSURFACE_LCL {
    pub lpSurfMore: *mut core::ffi::c_void,
    pub lpGbl: *mut core::ffi::c_void,
    pub hDDSurface: usize,
    pub lpAttachList: *mut core::ffi::c_void,
    pub lpAttachListFrom: *mut core::ffi::c_void,
    pub dwLocalRefCnt: u32,
    pub dwProcessId: u32,
    pub dwFlags: u32,
    pub ddsCaps: DDSCAPS,
    pub Anonymous1: _Anonymous1_e__Union,
    pub Anonymous2: _Anonymous2_e__Union,
    pub dwModeCreatedIn: u32,
    pub dwBackBufferCount: u32,
    pub ddckCKDestBlt: DDCOLORKEY,
    pub ddckCKSrcBlt: DDCOLORKEY,
    pub hDC: usize,
    pub dwReserved1: usize,
    pub ddckCKSrcOverlay: DDCOLORKEY,
    pub ddckCKDestOverlay: DDCOLORKEY,
    pub lpSurfaceOverlaying: *mut core::ffi::c_void,
    pub dbnOverlayNode: DBLNODE,
    pub rcOverlaySrc: RECT,
    pub rcOverlayDest: RECT,
    pub dwClrXparent: u32,
    pub dwAlpha: u32,
    pub lOverlayX: i32,
    pub lOverlayY: i32,
}
import "golang.org/x/sys/windows"

type DDSCAPS struct {
	dwCaps uint32
}

type DDCOLORKEY struct {
	dwColorSpaceLowValue uint32
	dwColorSpaceHighValue uint32
}

type DBLNODE struct {
	next uintptr
	prev uintptr
	object uintptr
	object_int uintptr
}

type RECT struct {
	left int32
	top int32
	right int32
	bottom int32
}

type DDRAWI_DDRAWSURFACE_LCL struct {
	lpSurfMore uintptr
	lpGbl uintptr
	hDDSurface uintptr
	lpAttachList uintptr
	lpAttachListFrom uintptr
	dwLocalRefCnt uint32
	dwProcessId uint32
	dwFlags uint32
	ddsCaps DDSCAPS
	Anonymous1 _Anonymous1_e__Union
	Anonymous2 _Anonymous2_e__Union
	dwModeCreatedIn uint32
	dwBackBufferCount uint32
	ddckCKDestBlt DDCOLORKEY
	ddckCKSrcBlt DDCOLORKEY
	hDC uintptr
	dwReserved1 uintptr
	ddckCKSrcOverlay DDCOLORKEY
	ddckCKDestOverlay DDCOLORKEY
	lpSurfaceOverlaying uintptr
	dbnOverlayNode DBLNODE
	rcOverlaySrc RECT
	rcOverlayDest RECT
	dwClrXparent uint32
	dwAlpha uint32
	lOverlayX int32
	lOverlayY int32
}
type
  DDSCAPS = record
    dwCaps: DWORD;
  end;

  DDCOLORKEY = record
    dwColorSpaceLowValue: DWORD;
    dwColorSpaceHighValue: DWORD;
  end;

  DBLNODE = record
    next: Pointer;
    prev: Pointer;
    object: Pointer;
    object_int: Pointer;
  end;

  RECT = record
    left: Integer;
    top: Integer;
    right: Integer;
    bottom: Integer;
  end;

  DDRAWI_DDRAWSURFACE_LCL = record
    lpSurfMore: Pointer;
    lpGbl: Pointer;
    hDDSurface: NativeUInt;
    lpAttachList: Pointer;
    lpAttachListFrom: Pointer;
    dwLocalRefCnt: DWORD;
    dwProcessId: DWORD;
    dwFlags: DWORD;
    ddsCaps: DDSCAPS;
    Anonymous1: _Anonymous1_e__Union;
    Anonymous2: _Anonymous2_e__Union;
    dwModeCreatedIn: DWORD;
    dwBackBufferCount: DWORD;
    ddckCKDestBlt: DDCOLORKEY;
    ddckCKSrcBlt: DDCOLORKEY;
    hDC: NativeUInt;
    dwReserved1: NativeUInt;
    ddckCKSrcOverlay: DDCOLORKEY;
    ddckCKDestOverlay: DDCOLORKEY;
    lpSurfaceOverlaying: Pointer;
    dbnOverlayNode: DBLNODE;
    rcOverlaySrc: RECT;
    rcOverlayDest: RECT;
    dwClrXparent: DWORD;
    dwAlpha: DWORD;
    lOverlayX: Integer;
    lOverlayY: Integer;
  end;
const DDSCAPS = extern struct {
    dwCaps: u32,
};

const DDCOLORKEY = extern struct {
    dwColorSpaceLowValue: u32,
    dwColorSpaceHighValue: u32,
};

const DBLNODE = extern struct {
    next: ?*anyopaque,
    prev: ?*anyopaque,
    object: ?*anyopaque,
    object_int: ?*anyopaque,
};

const RECT = extern struct {
    left: i32,
    top: i32,
    right: i32,
    bottom: i32,
};

const DDRAWI_DDRAWSURFACE_LCL = extern struct {
    lpSurfMore: ?*anyopaque,
    lpGbl: ?*anyopaque,
    hDDSurface: usize,
    lpAttachList: ?*anyopaque,
    lpAttachListFrom: ?*anyopaque,
    dwLocalRefCnt: u32,
    dwProcessId: u32,
    dwFlags: u32,
    ddsCaps: DDSCAPS,
    Anonymous1: _Anonymous1_e__Union,
    Anonymous2: _Anonymous2_e__Union,
    dwModeCreatedIn: u32,
    dwBackBufferCount: u32,
    ddckCKDestBlt: DDCOLORKEY,
    ddckCKSrcBlt: DDCOLORKEY,
    hDC: usize,
    dwReserved1: usize,
    ddckCKSrcOverlay: DDCOLORKEY,
    ddckCKDestOverlay: DDCOLORKEY,
    lpSurfaceOverlaying: ?*anyopaque,
    dbnOverlayNode: DBLNODE,
    rcOverlaySrc: RECT,
    rcOverlayDest: RECT,
    dwClrXparent: u32,
    dwAlpha: u32,
    lOverlayX: i32,
    lOverlayY: i32,
};
type
  DDSCAPS {.bycopy.} = object
    dwCaps: uint32

  DDCOLORKEY {.bycopy.} = object
    dwColorSpaceLowValue: uint32
    dwColorSpaceHighValue: uint32

  DBLNODE {.bycopy.} = object
    next: pointer
    prev: pointer
    object: pointer
    object_int: pointer

  RECT {.bycopy.} = object
    left: int32
    top: int32
    right: int32
    bottom: int32

  DDRAWI_DDRAWSURFACE_LCL {.bycopy.} = object
    lpSurfMore: pointer
    lpGbl: pointer
    hDDSurface: uint
    lpAttachList: pointer
    lpAttachListFrom: pointer
    dwLocalRefCnt: uint32
    dwProcessId: uint32
    dwFlags: uint32
    ddsCaps: DDSCAPS
    Anonymous1: _Anonymous1_e__Union
    Anonymous2: _Anonymous2_e__Union
    dwModeCreatedIn: uint32
    dwBackBufferCount: uint32
    ddckCKDestBlt: DDCOLORKEY
    ddckCKSrcBlt: DDCOLORKEY
    hDC: uint
    dwReserved1: uint
    ddckCKSrcOverlay: DDCOLORKEY
    ddckCKDestOverlay: DDCOLORKEY
    lpSurfaceOverlaying: pointer
    dbnOverlayNode: DBLNODE
    rcOverlaySrc: RECT
    rcOverlayDest: RECT
    dwClrXparent: uint32
    dwAlpha: uint32
    lOverlayX: int32
    lOverlayY: int32
struct DDSCAPS
{
    uint dwCaps;
}

struct DDCOLORKEY
{
    uint dwColorSpaceLowValue;
    uint dwColorSpaceHighValue;
}

struct DBLNODE
{
    void* next;
    void* prev;
    void* object;
    void* object_int;
}

struct RECT
{
    int left;
    int top;
    int right;
    int bottom;
}

struct DDRAWI_DDRAWSURFACE_LCL
{
    void* lpSurfMore;
    void* lpGbl;
    size_t hDDSurface;
    void* lpAttachList;
    void* lpAttachListFrom;
    uint dwLocalRefCnt;
    uint dwProcessId;
    uint dwFlags;
    DDSCAPS ddsCaps;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    uint dwModeCreatedIn;
    uint dwBackBufferCount;
    DDCOLORKEY ddckCKDestBlt;
    DDCOLORKEY ddckCKSrcBlt;
    size_t hDC;
    size_t dwReserved1;
    DDCOLORKEY ddckCKSrcOverlay;
    DDCOLORKEY ddckCKDestOverlay;
    void* lpSurfaceOverlaying;
    DBLNODE dbnOverlayNode;
    RECT rcOverlaySrc;
    RECT rcOverlayDest;
    uint dwClrXparent;
    uint dwAlpha;
    int lOverlayX;
    int lOverlayY;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DDRAWI_DDRAWSURFACE_LCL サイズ: 160 バイト(x86)
dim st, 40    ; 4byte整数×40(構造体サイズ 160 / 4 切り上げ)
; lpSurfMore : DDRAWI_DDRAWSURFACE_MORE* (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; lpGbl : DDRAWI_DDRAWSURFACE_GBL* (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; hDDSurface : UINT_PTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; lpAttachList : ATTACHLIST* (+12, 4byte)  varptr(st)+12 を基点に操作(4byte:入れ子/配列)
; lpAttachListFrom : ATTACHLIST* (+16, 4byte)  varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; dwLocalRefCnt : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwProcessId : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwFlags : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ddsCaps : DDSCAPS (+32, 4byte)  varptr(st)+32 を基点に操作(4byte:入れ子/配列)
; Anonymous1 : _Anonymous1_e__Union (+36, 4byte)  varptr(st)+36 を基点に操作(4byte:入れ子/配列)
; Anonymous2 : _Anonymous2_e__Union (+40, 4byte)  varptr(st)+40 を基点に操作(4byte:入れ子/配列)
; dwModeCreatedIn : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwBackBufferCount : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ddckCKDestBlt : DDCOLORKEY (+52, 8byte)  varptr(st)+52 を基点に操作(8byte:入れ子/配列)
; ddckCKSrcBlt : DDCOLORKEY (+60, 8byte)  varptr(st)+60 を基点に操作(8byte:入れ子/配列)
; hDC : UINT_PTR (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; dwReserved1 : UINT_PTR (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ddckCKSrcOverlay : DDCOLORKEY (+76, 8byte)  varptr(st)+76 を基点に操作(8byte:入れ子/配列)
; ddckCKDestOverlay : DDCOLORKEY (+84, 8byte)  varptr(st)+84 を基点に操作(8byte:入れ子/配列)
; lpSurfaceOverlaying : DDRAWI_DDRAWSURFACE_INT* (+92, 4byte)  varptr(st)+92 を基点に操作(4byte:入れ子/配列)
; dbnOverlayNode : DBLNODE (+96, 16byte)  varptr(st)+96 を基点に操作(16byte:入れ子/配列)
; rcOverlaySrc : RECT (+112, 16byte)  varptr(st)+112 を基点に操作(16byte:入れ子/配列)
; rcOverlayDest : RECT (+128, 16byte)  varptr(st)+128 を基点に操作(16byte:入れ子/配列)
; dwClrXparent : DWORD (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; dwAlpha : DWORD (+148, 4byte)  st.37 = 値  /  値 = st.37   (lpoke/lpeek も可)
; lOverlayX : INT (+152, 4byte)  st.38 = 値  /  値 = st.38   (lpoke/lpeek も可)
; lOverlayY : INT (+156, 4byte)  st.39 = 値  /  値 = st.39   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DDRAWI_DDRAWSURFACE_LCL サイズ: 216 バイト(x64)
dim st, 54    ; 4byte整数×54(構造体サイズ 216 / 4 切り上げ)
; lpSurfMore : DDRAWI_DDRAWSURFACE_MORE* (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; lpGbl : DDRAWI_DDRAWSURFACE_GBL* (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; hDDSurface : UINT_PTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; lpAttachList : ATTACHLIST* (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; lpAttachListFrom : ATTACHLIST* (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; dwLocalRefCnt : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; dwProcessId : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwFlags : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ddsCaps : DDSCAPS (+52, 4byte)  varptr(st)+52 を基点に操作(4byte:入れ子/配列)
; Anonymous1 : _Anonymous1_e__Union (+56, 8byte)  varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; Anonymous2 : _Anonymous2_e__Union (+64, 8byte)  varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; dwModeCreatedIn : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; dwBackBufferCount : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; ddckCKDestBlt : DDCOLORKEY (+80, 8byte)  varptr(st)+80 を基点に操作(8byte:入れ子/配列)
; ddckCKSrcBlt : DDCOLORKEY (+88, 8byte)  varptr(st)+88 を基点に操作(8byte:入れ子/配列)
; hDC : UINT_PTR (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; dwReserved1 : UINT_PTR (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; ddckCKSrcOverlay : DDCOLORKEY (+112, 8byte)  varptr(st)+112 を基点に操作(8byte:入れ子/配列)
; ddckCKDestOverlay : DDCOLORKEY (+120, 8byte)  varptr(st)+120 を基点に操作(8byte:入れ子/配列)
; lpSurfaceOverlaying : DDRAWI_DDRAWSURFACE_INT* (+128, 8byte)  varptr(st)+128 を基点に操作(8byte:入れ子/配列)
; dbnOverlayNode : DBLNODE (+136, 32byte)  varptr(st)+136 を基点に操作(32byte:入れ子/配列)
; rcOverlaySrc : RECT (+168, 16byte)  varptr(st)+168 を基点に操作(16byte:入れ子/配列)
; rcOverlayDest : RECT (+184, 16byte)  varptr(st)+184 を基点に操作(16byte:入れ子/配列)
; dwClrXparent : DWORD (+200, 4byte)  st.50 = 値  /  値 = st.50   (lpoke/lpeek も可)
; dwAlpha : DWORD (+204, 4byte)  st.51 = 値  /  値 = st.51   (lpoke/lpeek も可)
; lOverlayX : INT (+208, 4byte)  st.52 = 値  /  値 = st.52   (lpoke/lpeek も可)
; lOverlayY : INT (+212, 4byte)  st.53 = 値  /  値 = st.53   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DDSCAPS
    #field int dwCaps
#endstruct

#defstruct global DDCOLORKEY
    #field int dwColorSpaceLowValue
    #field int dwColorSpaceHighValue
#endstruct

#defstruct global DBLNODE
    #field intptr next
    #field intptr prev
    #field intptr object
    #field intptr object_int
#endstruct

#defstruct global RECT
    #field int left
    #field int top
    #field int right
    #field int bottom
#endstruct

#defstruct global DDRAWI_DDRAWSURFACE_LCL
    #field intptr lpSurfMore
    #field intptr lpGbl
    #field intptr hDDSurface
    #field intptr lpAttachList
    #field intptr lpAttachListFrom
    #field int dwLocalRefCnt
    #field int dwProcessId
    #field int dwFlags
    #field DDSCAPS ddsCaps
    #field byte Anonymous1 8
    #field byte Anonymous2 8
    #field int dwModeCreatedIn
    #field int dwBackBufferCount
    #field DDCOLORKEY ddckCKDestBlt
    #field DDCOLORKEY ddckCKSrcBlt
    #field intptr hDC
    #field intptr dwReserved1
    #field DDCOLORKEY ddckCKSrcOverlay
    #field DDCOLORKEY ddckCKDestOverlay
    #field intptr lpSurfaceOverlaying
    #field DBLNODE dbnOverlayNode
    #field RECT rcOverlaySrc
    #field RECT rcOverlayDest
    #field int dwClrXparent
    #field int dwAlpha
    #field int lOverlayX
    #field int lOverlayY
#endstruct

stdim st, DDRAWI_DDRAWSURFACE_LCL        ; NSTRUCT 変数を確保
st->hDDSurface = 100
mes "hDDSurface=" + st->hDDSurface
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。