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

DDRAWI_DDRAWSURFACE_MORE

構造体
サイズx64: 240 バイト / x86: 136 バイト

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

フィールド

フィールドサイズx64x86説明
dwSizeDWORD4+0+0構造体サイズ(バイト数)。呼び出し前に設定する。
lpIUnknownsIUNKNOWN_LIST*8/4+8+4サーフェスに関連付けられたIUnknownリストへのポインタ。
lpDD_lclDDRAWI_DIRECTDRAW_LCL*8/4+16+8所属するローカルDirectDrawオブジェクトへのポインタ。
dwPageLockCountDWORD4+24+12ページロックのカウントを示す。
dwBytesAllocatedDWORD4+28+16サーフェスに確保されたバイト数を示す。
lpDD_intDDRAWI_DIRECTDRAW_INT*8/4+32+20関連するDirectDrawインターフェイスオブジェクトへのポインタ。
dwMipMapCountDWORD4+40+24ミップマップレベルの数を示す。
lpDDIClipperDDRAWI_DDRAWCLIPPER_INT*8/4+48+28サーフェスに付加されたクリッパーオブジェクトへのポインタ。
lpHeapAliasInfoHEAPALIASINFO*8/4+56+32関連するヒープエイリアス情報(HEAPALIASINFO)へのポインタ。
dwOverlayFlagsDWORD4+64+36オーバーレイ状態を示すフラグを示す。
rgjuncvoid*8/4+72+40オーバーレイ接合領域情報へのポインタを示す。
lpVideoPortDDRAWI_DDVIDEOPORT_LCL*8/4+80+44関連付けられたビデオポートのローカルオブジェクトへのポインタ。
lpddOverlayFXDDOVERLAYFX*8/4+88+48オーバーレイ効果指定(DDOVERLAYFX)へのポインタ。NULL可。
ddsCapsExDDSCAPSEX12+96+52拡張サーフェス能力(DDSCAPSEX)を示す。
dwTextureStageDWORD4+108+64マルチテクスチャ時のテクスチャステージ番号を示す。
lpDDRAWReservedvoid*8/4+112+68DirectDraw内部用の予約ポインタを示す。
lpDDRAWReserved2void*8/4+120+72DirectDraw内部用の予約ポインタ(その2)。
lpDDrawReserved3void*8/4+128+76DirectDraw内部用の予約ポインタ(その3)。
dwDDrawReserved4DWORD4+136+80DirectDraw内部用の予約フィールド(その4)。
lpDDrawReserved5void*8/4+144+84DirectDraw内部用の予約ポインタ(その5)。
lpGammaRampDWORD*8/4+152+88現在のガンマランプ(DWORD配列)へのポインタ。NULL可。
lpOriginalGammaRampDWORD*8/4+160+92元のガンマランプへのポインタを示す。NULL可。
lpDDrawReserved6void*8/4+168+96DirectDraw内部用の予約ポインタ(その6)。
dwSurfaceHandleDWORD4+176+100ドライバが用いるサーフェスハンドルを示す。
qwDDrawReserved8DWORD8+180+104DirectDraw内部用の予約フィールド(その8)。
lpDDrawReserved9void*8/4+192+112DirectDraw内部用の予約ポインタ(その9)。
cSurfacesDWORD4+200+116関連するサーフェスの数を示す。
pCreatedDDSurfaceDesc2DDSURFACEDESC2*8/4+208+120作成時のサーフェス記述(DDSURFACEDESC2)へのポインタ。
slistDDRAWI_DDRAWSURFACE_LCL**8/4+216+124サーフェスローカルオブジェクトのポインタ配列へのポインタ。
dwFVFDWORD4+224+128頂点バッファサーフェスの柔軟頂点フォーマット(FVF)を示す。
lpVBvoid*8/4+232+132関連する頂点バッファオブジェクトへのポインタを示す。

各言語での定義

#include <windows.h>

// DDSCAPSEX  (x64 12 / x86 12 バイト)
typedef struct DDSCAPSEX {
    DWORD dwCaps2;
    DWORD dwCaps3;
    _Anonymous_e__Union Anonymous;
} DDSCAPSEX;

// DDRAWI_DDRAWSURFACE_MORE  (x64 240 / x86 136 バイト)
typedef struct DDRAWI_DDRAWSURFACE_MORE {
    DWORD dwSize;
    IUNKNOWN_LIST* lpIUnknowns;
    DDRAWI_DIRECTDRAW_LCL* lpDD_lcl;
    DWORD dwPageLockCount;
    DWORD dwBytesAllocated;
    DDRAWI_DIRECTDRAW_INT* lpDD_int;
    DWORD dwMipMapCount;
    DDRAWI_DDRAWCLIPPER_INT* lpDDIClipper;
    HEAPALIASINFO* lpHeapAliasInfo;
    DWORD dwOverlayFlags;
    void* rgjunc;
    DDRAWI_DDVIDEOPORT_LCL* lpVideoPort;
    DDOVERLAYFX* lpddOverlayFX;
    DDSCAPSEX ddsCapsEx;
    DWORD dwTextureStage;
    void* lpDDRAWReserved;
    void* lpDDRAWReserved2;
    void* lpDDrawReserved3;
    DWORD dwDDrawReserved4;
    void* lpDDrawReserved5;
    DWORD* lpGammaRamp;
    DWORD* lpOriginalGammaRamp;
    void* lpDDrawReserved6;
    DWORD dwSurfaceHandle;
    DWORD qwDDrawReserved8[2];
    void* lpDDrawReserved9;
    DWORD cSurfaces;
    DDSURFACEDESC2* pCreatedDDSurfaceDesc2;
    DDRAWI_DDRAWSURFACE_LCL** slist;
    DWORD dwFVF;
    void* lpVB;
} DDRAWI_DDRAWSURFACE_MORE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDSCAPSEX
{
    public uint dwCaps2;
    public uint dwCaps3;
    public _Anonymous_e__Union Anonymous;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDRAWI_DDRAWSURFACE_MORE
{
    public uint dwSize;
    public IntPtr lpIUnknowns;
    public IntPtr lpDD_lcl;
    public uint dwPageLockCount;
    public uint dwBytesAllocated;
    public IntPtr lpDD_int;
    public uint dwMipMapCount;
    public IntPtr lpDDIClipper;
    public IntPtr lpHeapAliasInfo;
    public uint dwOverlayFlags;
    public IntPtr rgjunc;
    public IntPtr lpVideoPort;
    public IntPtr lpddOverlayFX;
    public DDSCAPSEX ddsCapsEx;
    public uint dwTextureStage;
    public IntPtr lpDDRAWReserved;
    public IntPtr lpDDRAWReserved2;
    public IntPtr lpDDrawReserved3;
    public uint dwDDrawReserved4;
    public IntPtr lpDDrawReserved5;
    public IntPtr lpGammaRamp;
    public IntPtr lpOriginalGammaRamp;
    public IntPtr lpDDrawReserved6;
    public uint dwSurfaceHandle;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public uint[] qwDDrawReserved8;
    public IntPtr lpDDrawReserved9;
    public uint cSurfaces;
    public IntPtr pCreatedDDSurfaceDesc2;
    public IntPtr slist;
    public uint dwFVF;
    public IntPtr lpVB;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDSCAPSEX
    Public dwCaps2 As UInteger
    Public dwCaps3 As UInteger
    Public Anonymous As _Anonymous_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDRAWI_DDRAWSURFACE_MORE
    Public dwSize As UInteger
    Public lpIUnknowns As IntPtr
    Public lpDD_lcl As IntPtr
    Public dwPageLockCount As UInteger
    Public dwBytesAllocated As UInteger
    Public lpDD_int As IntPtr
    Public dwMipMapCount As UInteger
    Public lpDDIClipper As IntPtr
    Public lpHeapAliasInfo As IntPtr
    Public dwOverlayFlags As UInteger
    Public rgjunc As IntPtr
    Public lpVideoPort As IntPtr
    Public lpddOverlayFX As IntPtr
    Public ddsCapsEx As DDSCAPSEX
    Public dwTextureStage As UInteger
    Public lpDDRAWReserved As IntPtr
    Public lpDDRAWReserved2 As IntPtr
    Public lpDDrawReserved3 As IntPtr
    Public dwDDrawReserved4 As UInteger
    Public lpDDrawReserved5 As IntPtr
    Public lpGammaRamp As IntPtr
    Public lpOriginalGammaRamp As IntPtr
    Public lpDDrawReserved6 As IntPtr
    Public dwSurfaceHandle As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public qwDDrawReserved8() As UInteger
    Public lpDDrawReserved9 As IntPtr
    Public cSurfaces As UInteger
    Public pCreatedDDSurfaceDesc2 As IntPtr
    Public slist As IntPtr
    Public dwFVF As UInteger
    Public lpVB As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class DDSCAPSEX(ctypes.Structure):
    _fields_ = [
        ("dwCaps2", wintypes.DWORD),
        ("dwCaps3", wintypes.DWORD),
        ("Anonymous", _Anonymous_e__Union),
    ]

class DDRAWI_DDRAWSURFACE_MORE(ctypes.Structure):
    _fields_ = [
        ("dwSize", wintypes.DWORD),
        ("lpIUnknowns", ctypes.c_void_p),
        ("lpDD_lcl", ctypes.c_void_p),
        ("dwPageLockCount", wintypes.DWORD),
        ("dwBytesAllocated", wintypes.DWORD),
        ("lpDD_int", ctypes.c_void_p),
        ("dwMipMapCount", wintypes.DWORD),
        ("lpDDIClipper", ctypes.c_void_p),
        ("lpHeapAliasInfo", ctypes.c_void_p),
        ("dwOverlayFlags", wintypes.DWORD),
        ("rgjunc", ctypes.c_void_p),
        ("lpVideoPort", ctypes.c_void_p),
        ("lpddOverlayFX", ctypes.c_void_p),
        ("ddsCapsEx", DDSCAPSEX),
        ("dwTextureStage", wintypes.DWORD),
        ("lpDDRAWReserved", ctypes.c_void_p),
        ("lpDDRAWReserved2", ctypes.c_void_p),
        ("lpDDrawReserved3", ctypes.c_void_p),
        ("dwDDrawReserved4", wintypes.DWORD),
        ("lpDDrawReserved5", ctypes.c_void_p),
        ("lpGammaRamp", ctypes.c_void_p),
        ("lpOriginalGammaRamp", ctypes.c_void_p),
        ("lpDDrawReserved6", ctypes.c_void_p),
        ("dwSurfaceHandle", wintypes.DWORD),
        ("qwDDrawReserved8", wintypes.DWORD * 2),
        ("lpDDrawReserved9", ctypes.c_void_p),
        ("cSurfaces", wintypes.DWORD),
        ("pCreatedDDSurfaceDesc2", ctypes.c_void_p),
        ("slist", ctypes.c_void_p),
        ("dwFVF", wintypes.DWORD),
        ("lpVB", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct DDSCAPSEX {
    pub dwCaps2: u32,
    pub dwCaps3: u32,
    pub Anonymous: _Anonymous_e__Union,
}

#[repr(C)]
pub struct DDRAWI_DDRAWSURFACE_MORE {
    pub dwSize: u32,
    pub lpIUnknowns: *mut core::ffi::c_void,
    pub lpDD_lcl: *mut core::ffi::c_void,
    pub dwPageLockCount: u32,
    pub dwBytesAllocated: u32,
    pub lpDD_int: *mut core::ffi::c_void,
    pub dwMipMapCount: u32,
    pub lpDDIClipper: *mut core::ffi::c_void,
    pub lpHeapAliasInfo: *mut core::ffi::c_void,
    pub dwOverlayFlags: u32,
    pub rgjunc: *mut core::ffi::c_void,
    pub lpVideoPort: *mut core::ffi::c_void,
    pub lpddOverlayFX: *mut core::ffi::c_void,
    pub ddsCapsEx: DDSCAPSEX,
    pub dwTextureStage: u32,
    pub lpDDRAWReserved: *mut core::ffi::c_void,
    pub lpDDRAWReserved2: *mut core::ffi::c_void,
    pub lpDDrawReserved3: *mut core::ffi::c_void,
    pub dwDDrawReserved4: u32,
    pub lpDDrawReserved5: *mut core::ffi::c_void,
    pub lpGammaRamp: *mut core::ffi::c_void,
    pub lpOriginalGammaRamp: *mut core::ffi::c_void,
    pub lpDDrawReserved6: *mut core::ffi::c_void,
    pub dwSurfaceHandle: u32,
    pub qwDDrawReserved8: [u32; 2],
    pub lpDDrawReserved9: *mut core::ffi::c_void,
    pub cSurfaces: u32,
    pub pCreatedDDSurfaceDesc2: *mut core::ffi::c_void,
    pub slist: *mut core::ffi::c_void,
    pub dwFVF: u32,
    pub lpVB: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type DDSCAPSEX struct {
	dwCaps2 uint32
	dwCaps3 uint32
	Anonymous _Anonymous_e__Union
}

type DDRAWI_DDRAWSURFACE_MORE struct {
	dwSize uint32
	lpIUnknowns uintptr
	lpDD_lcl uintptr
	dwPageLockCount uint32
	dwBytesAllocated uint32
	lpDD_int uintptr
	dwMipMapCount uint32
	lpDDIClipper uintptr
	lpHeapAliasInfo uintptr
	dwOverlayFlags uint32
	rgjunc uintptr
	lpVideoPort uintptr
	lpddOverlayFX uintptr
	ddsCapsEx DDSCAPSEX
	dwTextureStage uint32
	lpDDRAWReserved uintptr
	lpDDRAWReserved2 uintptr
	lpDDrawReserved3 uintptr
	dwDDrawReserved4 uint32
	lpDDrawReserved5 uintptr
	lpGammaRamp uintptr
	lpOriginalGammaRamp uintptr
	lpDDrawReserved6 uintptr
	dwSurfaceHandle uint32
	qwDDrawReserved8 [2]uint32
	lpDDrawReserved9 uintptr
	cSurfaces uint32
	pCreatedDDSurfaceDesc2 uintptr
	slist uintptr
	dwFVF uint32
	lpVB uintptr
}
type
  DDSCAPSEX = record
    dwCaps2: DWORD;
    dwCaps3: DWORD;
    Anonymous: _Anonymous_e__Union;
  end;

  DDRAWI_DDRAWSURFACE_MORE = record
    dwSize: DWORD;
    lpIUnknowns: Pointer;
    lpDD_lcl: Pointer;
    dwPageLockCount: DWORD;
    dwBytesAllocated: DWORD;
    lpDD_int: Pointer;
    dwMipMapCount: DWORD;
    lpDDIClipper: Pointer;
    lpHeapAliasInfo: Pointer;
    dwOverlayFlags: DWORD;
    rgjunc: Pointer;
    lpVideoPort: Pointer;
    lpddOverlayFX: Pointer;
    ddsCapsEx: DDSCAPSEX;
    dwTextureStage: DWORD;
    lpDDRAWReserved: Pointer;
    lpDDRAWReserved2: Pointer;
    lpDDrawReserved3: Pointer;
    dwDDrawReserved4: DWORD;
    lpDDrawReserved5: Pointer;
    lpGammaRamp: Pointer;
    lpOriginalGammaRamp: Pointer;
    lpDDrawReserved6: Pointer;
    dwSurfaceHandle: DWORD;
    qwDDrawReserved8: array[0..1] of DWORD;
    lpDDrawReserved9: Pointer;
    cSurfaces: DWORD;
    pCreatedDDSurfaceDesc2: Pointer;
    slist: Pointer;
    dwFVF: DWORD;
    lpVB: Pointer;
  end;
const DDSCAPSEX = extern struct {
    dwCaps2: u32,
    dwCaps3: u32,
    Anonymous: _Anonymous_e__Union,
};

const DDRAWI_DDRAWSURFACE_MORE = extern struct {
    dwSize: u32,
    lpIUnknowns: ?*anyopaque,
    lpDD_lcl: ?*anyopaque,
    dwPageLockCount: u32,
    dwBytesAllocated: u32,
    lpDD_int: ?*anyopaque,
    dwMipMapCount: u32,
    lpDDIClipper: ?*anyopaque,
    lpHeapAliasInfo: ?*anyopaque,
    dwOverlayFlags: u32,
    rgjunc: ?*anyopaque,
    lpVideoPort: ?*anyopaque,
    lpddOverlayFX: ?*anyopaque,
    ddsCapsEx: DDSCAPSEX,
    dwTextureStage: u32,
    lpDDRAWReserved: ?*anyopaque,
    lpDDRAWReserved2: ?*anyopaque,
    lpDDrawReserved3: ?*anyopaque,
    dwDDrawReserved4: u32,
    lpDDrawReserved5: ?*anyopaque,
    lpGammaRamp: ?*anyopaque,
    lpOriginalGammaRamp: ?*anyopaque,
    lpDDrawReserved6: ?*anyopaque,
    dwSurfaceHandle: u32,
    qwDDrawReserved8: [2]u32,
    lpDDrawReserved9: ?*anyopaque,
    cSurfaces: u32,
    pCreatedDDSurfaceDesc2: ?*anyopaque,
    slist: ?*anyopaque,
    dwFVF: u32,
    lpVB: ?*anyopaque,
};
type
  DDSCAPSEX {.bycopy.} = object
    dwCaps2: uint32
    dwCaps3: uint32
    Anonymous: _Anonymous_e__Union

  DDRAWI_DDRAWSURFACE_MORE {.bycopy.} = object
    dwSize: uint32
    lpIUnknowns: pointer
    lpDD_lcl: pointer
    dwPageLockCount: uint32
    dwBytesAllocated: uint32
    lpDD_int: pointer
    dwMipMapCount: uint32
    lpDDIClipper: pointer
    lpHeapAliasInfo: pointer
    dwOverlayFlags: uint32
    rgjunc: pointer
    lpVideoPort: pointer
    lpddOverlayFX: pointer
    ddsCapsEx: DDSCAPSEX
    dwTextureStage: uint32
    lpDDRAWReserved: pointer
    lpDDRAWReserved2: pointer
    lpDDrawReserved3: pointer
    dwDDrawReserved4: uint32
    lpDDrawReserved5: pointer
    lpGammaRamp: pointer
    lpOriginalGammaRamp: pointer
    lpDDrawReserved6: pointer
    dwSurfaceHandle: uint32
    qwDDrawReserved8: array[2, uint32]
    lpDDrawReserved9: pointer
    cSurfaces: uint32
    pCreatedDDSurfaceDesc2: pointer
    slist: pointer
    dwFVF: uint32
    lpVB: pointer
struct DDSCAPSEX
{
    uint dwCaps2;
    uint dwCaps3;
    _Anonymous_e__Union Anonymous;
}

struct DDRAWI_DDRAWSURFACE_MORE
{
    uint dwSize;
    void* lpIUnknowns;
    void* lpDD_lcl;
    uint dwPageLockCount;
    uint dwBytesAllocated;
    void* lpDD_int;
    uint dwMipMapCount;
    void* lpDDIClipper;
    void* lpHeapAliasInfo;
    uint dwOverlayFlags;
    void* rgjunc;
    void* lpVideoPort;
    void* lpddOverlayFX;
    DDSCAPSEX ddsCapsEx;
    uint dwTextureStage;
    void* lpDDRAWReserved;
    void* lpDDRAWReserved2;
    void* lpDDrawReserved3;
    uint dwDDrawReserved4;
    void* lpDDrawReserved5;
    void* lpGammaRamp;
    void* lpOriginalGammaRamp;
    void* lpDDrawReserved6;
    uint dwSurfaceHandle;
    uint[2] qwDDrawReserved8;
    void* lpDDrawReserved9;
    uint cSurfaces;
    void* pCreatedDDSurfaceDesc2;
    void* slist;
    uint dwFVF;
    void* lpVB;
}

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_MORE サイズ: 136 バイト(x86)
dim st, 34    ; 4byte整数×34(構造体サイズ 136 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpIUnknowns : IUNKNOWN_LIST* (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; lpDD_lcl : DDRAWI_DIRECTDRAW_LCL* (+8, 4byte)  varptr(st)+8 を基点に操作(4byte:入れ子/配列)
; dwPageLockCount : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwBytesAllocated : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; lpDD_int : DDRAWI_DIRECTDRAW_INT* (+20, 4byte)  varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; dwMipMapCount : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; lpDDIClipper : DDRAWI_DDRAWCLIPPER_INT* (+28, 4byte)  varptr(st)+28 を基点に操作(4byte:入れ子/配列)
; lpHeapAliasInfo : HEAPALIASINFO* (+32, 4byte)  varptr(st)+32 を基点に操作(4byte:入れ子/配列)
; dwOverlayFlags : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; rgjunc : void* (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; lpVideoPort : DDRAWI_DDVIDEOPORT_LCL* (+44, 4byte)  varptr(st)+44 を基点に操作(4byte:入れ子/配列)
; lpddOverlayFX : DDOVERLAYFX* (+48, 4byte)  varptr(st)+48 を基点に操作(4byte:入れ子/配列)
; ddsCapsEx : DDSCAPSEX (+52, 12byte)  varptr(st)+52 を基点に操作(12byte:入れ子/配列)
; dwTextureStage : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; lpDDRAWReserved : void* (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; lpDDRAWReserved2 : void* (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; lpDDrawReserved3 : void* (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; dwDDrawReserved4 : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; lpDDrawReserved5 : void* (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; lpGammaRamp : DWORD* (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; lpOriginalGammaRamp : DWORD* (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; lpDDrawReserved6 : void* (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; dwSurfaceHandle : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; qwDDrawReserved8 : DWORD (+104, 8byte)  varptr(st)+104 を基点に操作(8byte:入れ子/配列)
; lpDDrawReserved9 : void* (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; cSurfaces : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; pCreatedDDSurfaceDesc2 : DDSURFACEDESC2* (+120, 4byte)  varptr(st)+120 を基点に操作(4byte:入れ子/配列)
; slist : DDRAWI_DDRAWSURFACE_LCL** (+124, 4byte)  varptr(st)+124 を基点に操作(4byte:入れ子/配列)
; dwFVF : DWORD (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; lpVB : void* (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DDRAWI_DDRAWSURFACE_MORE サイズ: 240 バイト(x64)
dim st, 60    ; 4byte整数×60(構造体サイズ 240 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpIUnknowns : IUNKNOWN_LIST* (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; lpDD_lcl : DDRAWI_DIRECTDRAW_LCL* (+16, 8byte)  varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; dwPageLockCount : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwBytesAllocated : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; lpDD_int : DDRAWI_DIRECTDRAW_INT* (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; dwMipMapCount : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; lpDDIClipper : DDRAWI_DDRAWCLIPPER_INT* (+48, 8byte)  varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; lpHeapAliasInfo : HEAPALIASINFO* (+56, 8byte)  varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; dwOverlayFlags : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; rgjunc : void* (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; lpVideoPort : DDRAWI_DDVIDEOPORT_LCL* (+80, 8byte)  varptr(st)+80 を基点に操作(8byte:入れ子/配列)
; lpddOverlayFX : DDOVERLAYFX* (+88, 8byte)  varptr(st)+88 を基点に操作(8byte:入れ子/配列)
; ddsCapsEx : DDSCAPSEX (+96, 12byte)  varptr(st)+96 を基点に操作(12byte:入れ子/配列)
; dwTextureStage : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; lpDDRAWReserved : void* (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; lpDDRAWReserved2 : void* (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; lpDDrawReserved3 : void* (+128, 8byte)  qpoke st,128,値 / qpeek(st,128)  ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; dwDDrawReserved4 : DWORD (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; lpDDrawReserved5 : void* (+144, 8byte)  qpoke st,144,値 / qpeek(st,144)  ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; lpGammaRamp : DWORD* (+152, 8byte)  qpoke st,152,値 / qpeek(st,152)  ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; lpOriginalGammaRamp : DWORD* (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; lpDDrawReserved6 : void* (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; dwSurfaceHandle : DWORD (+176, 4byte)  st.44 = 値  /  値 = st.44   (lpoke/lpeek も可)
; qwDDrawReserved8 : DWORD (+180, 8byte)  varptr(st)+180 を基点に操作(8byte:入れ子/配列)
; lpDDrawReserved9 : void* (+192, 8byte)  qpoke st,192,値 / qpeek(st,192)  ※IronHSPのみ。3.7/3.8は lpoke st,192,下位 : lpoke st,196,上位
; cSurfaces : DWORD (+200, 4byte)  st.50 = 値  /  値 = st.50   (lpoke/lpeek も可)
; pCreatedDDSurfaceDesc2 : DDSURFACEDESC2* (+208, 8byte)  varptr(st)+208 を基点に操作(8byte:入れ子/配列)
; slist : DDRAWI_DDRAWSURFACE_LCL** (+216, 8byte)  varptr(st)+216 を基点に操作(8byte:入れ子/配列)
; dwFVF : DWORD (+224, 4byte)  st.56 = 値  /  値 = st.56   (lpoke/lpeek も可)
; lpVB : void* (+232, 8byte)  qpoke st,232,値 / qpeek(st,232)  ※IronHSPのみ。3.7/3.8は lpoke st,232,下位 : lpoke st,236,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DDSCAPSEX
    #field int dwCaps2
    #field int dwCaps3
    #field byte Anonymous 4
#endstruct

#defstruct global DDRAWI_DDRAWSURFACE_MORE
    #field int dwSize
    #field intptr lpIUnknowns
    #field intptr lpDD_lcl
    #field int dwPageLockCount
    #field int dwBytesAllocated
    #field intptr lpDD_int
    #field int dwMipMapCount
    #field intptr lpDDIClipper
    #field intptr lpHeapAliasInfo
    #field int dwOverlayFlags
    #field intptr rgjunc
    #field intptr lpVideoPort
    #field intptr lpddOverlayFX
    #field DDSCAPSEX ddsCapsEx
    #field int dwTextureStage
    #field intptr lpDDRAWReserved
    #field intptr lpDDRAWReserved2
    #field intptr lpDDrawReserved3
    #field int dwDDrawReserved4
    #field intptr lpDDrawReserved5
    #field intptr lpGammaRamp
    #field intptr lpOriginalGammaRamp
    #field intptr lpDDrawReserved6
    #field int dwSurfaceHandle
    #field int qwDDrawReserved8 2
    #field intptr lpDDrawReserved9
    #field int cSurfaces
    #field intptr pCreatedDDSurfaceDesc2
    #field intptr slist
    #field int dwFVF
    #field intptr lpVB
#endstruct

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