ホーム › Graphics.DirectDraw › DDRAWI_DDRAWSURFACE_LCL
DDRAWI_DDRAWSURFACE_LCL
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| lpSurfMore | DDRAWI_DDRAWSURFACE_MORE* | 8/4 | +0 | +0 | サーフェスの拡張情報(DDRAWI_DDRAWSURFACE_MORE)へのポインタ。 |
| lpGbl | DDRAWI_DDRAWSURFACE_GBL* | 8/4 | +8 | +4 | 対応するグローバルサーフェスオブジェクトへのポインタ。 |
| hDDSurface | UINT_PTR | 8/4 | +16 | +8 | ドライバが用いるサーフェスハンドルを示す。 |
| lpAttachList | ATTACHLIST* | 8/4 | +24 | +12 | このサーフェスに付属するサーフェスのリストへのポインタ。 |
| lpAttachListFrom | ATTACHLIST* | 8/4 | +32 | +16 | このサーフェスが付属している側のリストへのポインタ。 |
| dwLocalRefCnt | DWORD | 4 | +40 | +20 | ローカルサーフェスオブジェクトの参照カウントを示す。 |
| dwProcessId | DWORD | 4 | +44 | +24 | このサーフェスを所有するプロセスの識別子を示す。 |
| dwFlags | DWORD | 4 | +48 | +28 | サーフェスのローカル属性を示すDDRAWISURF_系フラグ。 |
| ddsCaps | DDSCAPS | 4 | +52 | +32 | サーフェスの能力/種別(DDSCAPS)。 |
| Anonymous1 | _Anonymous1_e__Union | 8/4 | +56 | +36 | 対応するグローバルオブジェクト(GBL/MORE)を保持する共用体。 |
| Anonymous2 | _Anonymous2_e__Union | 8/4 | +64 | +40 | クリッパーオブジェクトまたはエイリアスを保持する共用体。 |
| dwModeCreatedIn | DWORD | 4 | +72 | +44 | サーフェス作成時のディスプレイモードを示す。 |
| dwBackBufferCount | DWORD | 4 | +76 | +48 | フリップチェーンのバックバッファ数を示す。 |
| ddckCKDestBlt | DDCOLORKEY | 8 | +80 | +52 | 転送先Blt用カラーキー(DDCOLORKEY)。 |
| ddckCKSrcBlt | DDCOLORKEY | 8 | +88 | +60 | 転送元Blt用カラーキー(DDCOLORKEY)。 |
| hDC | UINT_PTR | 8/4 | +96 | +68 | サーフェスに関連付けられたデバイスコンテキストハンドルを示す。 |
| dwReserved1 | UINT_PTR | 8/4 | +104 | +72 | 予約フィールド。0とする。 |
| ddckCKSrcOverlay | DDCOLORKEY | 8 | +112 | +76 | 転送元オーバーレイ用カラーキー(DDCOLORKEY)。 |
| ddckCKDestOverlay | DDCOLORKEY | 8 | +120 | +84 | 転送先オーバーレイ用カラーキー(DDCOLORKEY)。 |
| lpSurfaceOverlaying | DDRAWI_DDRAWSURFACE_INT* | 8/4 | +128 | +92 | このサーフェスが重ねて表示している対象サーフェスへのポインタ。 |
| dbnOverlayNode | DBLNODE | 32/16 | +136 | +96 | オーバーレイ管理用の双方向リストノード(DBLNODE)。 |
| rcOverlaySrc | RECT | 16 | +168 | +112 | オーバーレイの転送元矩形(RECT)を示す。 |
| rcOverlayDest | RECT | 16 | +184 | +128 | オーバーレイの転送先矩形(RECT)を示す。 |
| dwClrXparent | DWORD | 4 | +200 | +144 | 透過色として扱う色値を示す。 |
| dwAlpha | DWORD | 4 | +204 | +148 | オーバーレイに適用するアルファ値を示す。 |
| lOverlayX | INT | 4 | +208 | +152 | オーバーレイの表示X座標を示す。 |
| lOverlayY | INT | 4 | +212 | +156 | オーバーレイの表示Y座標を示す。 |
共用体: _Anonymous1_e__Union x64 8B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| lpDDPalette | DDRAWI_DDRAWPALETTE_INT* | 8/4 | +0 | +0 |
| lp16DDPalette | DDRAWI_DDRAWPALETTE_INT* | 8/4 | +0 | +0 |
共用体: _Anonymous2_e__Union x64 8B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| lpDDClipper | DDRAWI_DDRAWCLIPPER_LCL* | 8/4 | +0 | +0 |
| lp16DDClipper | DDRAWI_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 Structureimport 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: int32struct 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 非対応)。必要に応じ手動でアクセス。