ホーム › Graphics.DirectDraw › DDRAWI_DDRAWSURFACE_MORE
DDRAWI_DDRAWSURFACE_MORE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwSize | DWORD | 4 | +0 | +0 | 構造体サイズ(バイト数)。呼び出し前に設定する。 |
| lpIUnknowns | IUNKNOWN_LIST* | 8/4 | +8 | +4 | サーフェスに関連付けられたIUnknownリストへのポインタ。 |
| lpDD_lcl | DDRAWI_DIRECTDRAW_LCL* | 8/4 | +16 | +8 | 所属するローカルDirectDrawオブジェクトへのポインタ。 |
| dwPageLockCount | DWORD | 4 | +24 | +12 | ページロックのカウントを示す。 |
| dwBytesAllocated | DWORD | 4 | +28 | +16 | サーフェスに確保されたバイト数を示す。 |
| lpDD_int | DDRAWI_DIRECTDRAW_INT* | 8/4 | +32 | +20 | 関連するDirectDrawインターフェイスオブジェクトへのポインタ。 |
| dwMipMapCount | DWORD | 4 | +40 | +24 | ミップマップレベルの数を示す。 |
| lpDDIClipper | DDRAWI_DDRAWCLIPPER_INT* | 8/4 | +48 | +28 | サーフェスに付加されたクリッパーオブジェクトへのポインタ。 |
| lpHeapAliasInfo | HEAPALIASINFO* | 8/4 | +56 | +32 | 関連するヒープエイリアス情報(HEAPALIASINFO)へのポインタ。 |
| dwOverlayFlags | DWORD | 4 | +64 | +36 | オーバーレイ状態を示すフラグを示す。 |
| rgjunc | void* | 8/4 | +72 | +40 | オーバーレイ接合領域情報へのポインタを示す。 |
| lpVideoPort | DDRAWI_DDVIDEOPORT_LCL* | 8/4 | +80 | +44 | 関連付けられたビデオポートのローカルオブジェクトへのポインタ。 |
| lpddOverlayFX | DDOVERLAYFX* | 8/4 | +88 | +48 | オーバーレイ効果指定(DDOVERLAYFX)へのポインタ。NULL可。 |
| ddsCapsEx | DDSCAPSEX | 12 | +96 | +52 | 拡張サーフェス能力(DDSCAPSEX)を示す。 |
| dwTextureStage | DWORD | 4 | +108 | +64 | マルチテクスチャ時のテクスチャステージ番号を示す。 |
| lpDDRAWReserved | void* | 8/4 | +112 | +68 | DirectDraw内部用の予約ポインタを示す。 |
| lpDDRAWReserved2 | void* | 8/4 | +120 | +72 | DirectDraw内部用の予約ポインタ(その2)。 |
| lpDDrawReserved3 | void* | 8/4 | +128 | +76 | DirectDraw内部用の予約ポインタ(その3)。 |
| dwDDrawReserved4 | DWORD | 4 | +136 | +80 | DirectDraw内部用の予約フィールド(その4)。 |
| lpDDrawReserved5 | void* | 8/4 | +144 | +84 | DirectDraw内部用の予約ポインタ(その5)。 |
| lpGammaRamp | DWORD* | 8/4 | +152 | +88 | 現在のガンマランプ(DWORD配列)へのポインタ。NULL可。 |
| lpOriginalGammaRamp | DWORD* | 8/4 | +160 | +92 | 元のガンマランプへのポインタを示す。NULL可。 |
| lpDDrawReserved6 | void* | 8/4 | +168 | +96 | DirectDraw内部用の予約ポインタ(その6)。 |
| dwSurfaceHandle | DWORD | 4 | +176 | +100 | ドライバが用いるサーフェスハンドルを示す。 |
| qwDDrawReserved8 | DWORD | 8 | +180 | +104 | DirectDraw内部用の予約フィールド(その8)。 |
| lpDDrawReserved9 | void* | 8/4 | +192 | +112 | DirectDraw内部用の予約ポインタ(その9)。 |
| cSurfaces | DWORD | 4 | +200 | +116 | 関連するサーフェスの数を示す。 |
| pCreatedDDSurfaceDesc2 | DDSURFACEDESC2* | 8/4 | +208 | +120 | 作成時のサーフェス記述(DDSURFACEDESC2)へのポインタ。 |
| slist | DDRAWI_DDRAWSURFACE_LCL** | 8/4 | +216 | +124 | サーフェスローカルオブジェクトのポインタ配列へのポインタ。 |
| dwFVF | DWORD | 4 | +224 | +128 | 頂点バッファサーフェスの柔軟頂点フォーマット(FVF)を示す。 |
| lpVB | void* | 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 Structureimport 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: pointerstruct 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