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

VMEMHEAP

構造体
サイズx64: 192 バイト / x86: 128 バイト

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

フィールド

フィールドサイズx64x86説明
dwFlagsDWORD4+0+0ヒープの種別/属性を示すフラグの組み合わせ。
strideDWORD4+4+4矩形ヒープにおける1ラインのバイト幅を示す。
freeListvoid*8/4+8+8空き領域リストの先頭へのポインタを示す。
allocListvoid*8/4+16+12確保済み領域リストの先頭へのポインタを示す。
dwTotalSizeDWORD4+24+16ヒープの総サイズ(バイト)を示す。
fpGARTLinUINT_PTR8/4+32+20AGP/GARTのリニアアドレス基準値を示す。
fpGARTDevUINT_PTR8/4+40+24AGP/GARTのデバイスアドレス基準値を示す。
dwCommitedSizeDWORD4+48+28現在コミット済みのサイズ(バイト)を示す。
dwCoalesceCountDWORD4+52+32空き領域の結合(合体)回数を示す。
AlignmentHEAPALIGNMENT72/40+56+36このヒープに適用されるアライメント情報(HEAPALIGNMENT)。
ddsCapsExDDSCAPSEX12+128+76拡張サーフェス能力(DDSCAPSEX)を示す。
ddsCapsExAltDDSCAPSEX12+140+88代替の拡張サーフェス能力(DDSCAPSEX)を示す。
liPhysAGPBaseLONGLONG8+152+104AGPメモリの物理ベースアドレスを示す。
hdevAGPHANDLE8/4+160+112AGPデバイスのハンドルを示す。
pvPhysRsrvvoid*8/4+168+116予約された物理メモリ領域へのポインタを示す。
pAgpCommitMaskBYTE*8/4+176+120AGPコミット状態を表すビットマスク配列へのポインタ。
dwAgpCommitMaskSizeDWORD4+184+124AGPコミットマスクのサイズ(バイト)を示す。

各言語での定義

#include <windows.h>

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

// SURFACEALIGNMENT  (x64 8 / x86 4 バイト)
typedef struct SURFACEALIGNMENT {
    _Anonymous_e__Union Anonymous;
} SURFACEALIGNMENT;

// HEAPALIGNMENT  (x64 72 / x86 40 バイト)
typedef struct HEAPALIGNMENT {
    DWORD dwSize;
    DDSCAPS ddsCaps;
    DWORD dwReserved;
    SURFACEALIGNMENT ExecuteBuffer;
    SURFACEALIGNMENT Overlay;
    SURFACEALIGNMENT Texture;
    SURFACEALIGNMENT ZBuffer;
    SURFACEALIGNMENT AlphaBuffer;
    SURFACEALIGNMENT Offscreen;
    SURFACEALIGNMENT FlipTarget;
} HEAPALIGNMENT;

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

// VMEMHEAP  (x64 192 / x86 128 バイト)
typedef struct VMEMHEAP {
    DWORD dwFlags;
    DWORD stride;
    void* freeList;
    void* allocList;
    DWORD dwTotalSize;
    UINT_PTR fpGARTLin;
    UINT_PTR fpGARTDev;
    DWORD dwCommitedSize;
    DWORD dwCoalesceCount;
    HEAPALIGNMENT Alignment;
    DDSCAPSEX ddsCapsEx;
    DDSCAPSEX ddsCapsExAlt;
    LONGLONG liPhysAGPBase;
    HANDLE hdevAGP;
    void* pvPhysRsrv;
    BYTE* pAgpCommitMask;
    DWORD dwAgpCommitMaskSize;
} VMEMHEAP;
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 SURFACEALIGNMENT
{
    public _Anonymous_e__Union Anonymous;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HEAPALIGNMENT
{
    public uint dwSize;
    public DDSCAPS ddsCaps;
    public uint dwReserved;
    public SURFACEALIGNMENT ExecuteBuffer;
    public SURFACEALIGNMENT Overlay;
    public SURFACEALIGNMENT Texture;
    public SURFACEALIGNMENT ZBuffer;
    public SURFACEALIGNMENT AlphaBuffer;
    public SURFACEALIGNMENT Offscreen;
    public SURFACEALIGNMENT FlipTarget;
}

[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 VMEMHEAP
{
    public uint dwFlags;
    public uint stride;
    public IntPtr freeList;
    public IntPtr allocList;
    public uint dwTotalSize;
    public UIntPtr fpGARTLin;
    public UIntPtr fpGARTDev;
    public uint dwCommitedSize;
    public uint dwCoalesceCount;
    public HEAPALIGNMENT Alignment;
    public DDSCAPSEX ddsCapsEx;
    public DDSCAPSEX ddsCapsExAlt;
    public long liPhysAGPBase;
    public IntPtr hdevAGP;
    public IntPtr pvPhysRsrv;
    public IntPtr pAgpCommitMask;
    public uint dwAgpCommitMaskSize;
}
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 SURFACEALIGNMENT
    Public Anonymous As _Anonymous_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HEAPALIGNMENT
    Public dwSize As UInteger
    Public ddsCaps As DDSCAPS
    Public dwReserved As UInteger
    Public ExecuteBuffer As SURFACEALIGNMENT
    Public Overlay As SURFACEALIGNMENT
    Public Texture As SURFACEALIGNMENT
    Public ZBuffer As SURFACEALIGNMENT
    Public AlphaBuffer As SURFACEALIGNMENT
    Public Offscreen As SURFACEALIGNMENT
    Public FlipTarget As SURFACEALIGNMENT
End Structure

<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 VMEMHEAP
    Public dwFlags As UInteger
    Public stride As UInteger
    Public freeList As IntPtr
    Public allocList As IntPtr
    Public dwTotalSize As UInteger
    Public fpGARTLin As UIntPtr
    Public fpGARTDev As UIntPtr
    Public dwCommitedSize As UInteger
    Public dwCoalesceCount As UInteger
    Public Alignment As HEAPALIGNMENT
    Public ddsCapsEx As DDSCAPSEX
    Public ddsCapsExAlt As DDSCAPSEX
    Public liPhysAGPBase As Long
    Public hdevAGP As IntPtr
    Public pvPhysRsrv As IntPtr
    Public pAgpCommitMask As IntPtr
    Public dwAgpCommitMaskSize As UInteger
End Structure
import ctypes
from ctypes import wintypes

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

class SURFACEALIGNMENT(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Union),
    ]

class HEAPALIGNMENT(ctypes.Structure):
    _fields_ = [
        ("dwSize", wintypes.DWORD),
        ("ddsCaps", DDSCAPS),
        ("dwReserved", wintypes.DWORD),
        ("ExecuteBuffer", SURFACEALIGNMENT),
        ("Overlay", SURFACEALIGNMENT),
        ("Texture", SURFACEALIGNMENT),
        ("ZBuffer", SURFACEALIGNMENT),
        ("AlphaBuffer", SURFACEALIGNMENT),
        ("Offscreen", SURFACEALIGNMENT),
        ("FlipTarget", SURFACEALIGNMENT),
    ]

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

class VMEMHEAP(ctypes.Structure):
    _fields_ = [
        ("dwFlags", wintypes.DWORD),
        ("stride", wintypes.DWORD),
        ("freeList", ctypes.c_void_p),
        ("allocList", ctypes.c_void_p),
        ("dwTotalSize", wintypes.DWORD),
        ("fpGARTLin", ctypes.c_size_t),
        ("fpGARTDev", ctypes.c_size_t),
        ("dwCommitedSize", wintypes.DWORD),
        ("dwCoalesceCount", wintypes.DWORD),
        ("Alignment", HEAPALIGNMENT),
        ("ddsCapsEx", DDSCAPSEX),
        ("ddsCapsExAlt", DDSCAPSEX),
        ("liPhysAGPBase", ctypes.c_longlong),
        ("hdevAGP", ctypes.c_void_p),
        ("pvPhysRsrv", ctypes.c_void_p),
        ("pAgpCommitMask", ctypes.c_void_p),
        ("dwAgpCommitMaskSize", wintypes.DWORD),
    ]
#[repr(C)]
pub struct DDSCAPS {
    pub dwCaps: u32,
}

#[repr(C)]
pub struct SURFACEALIGNMENT {
    pub Anonymous: _Anonymous_e__Union,
}

#[repr(C)]
pub struct HEAPALIGNMENT {
    pub dwSize: u32,
    pub ddsCaps: DDSCAPS,
    pub dwReserved: u32,
    pub ExecuteBuffer: SURFACEALIGNMENT,
    pub Overlay: SURFACEALIGNMENT,
    pub Texture: SURFACEALIGNMENT,
    pub ZBuffer: SURFACEALIGNMENT,
    pub AlphaBuffer: SURFACEALIGNMENT,
    pub Offscreen: SURFACEALIGNMENT,
    pub FlipTarget: SURFACEALIGNMENT,
}

#[repr(C)]
pub struct DDSCAPSEX {
    pub dwCaps2: u32,
    pub dwCaps3: u32,
    pub Anonymous: _Anonymous_e__Union,
}

#[repr(C)]
pub struct VMEMHEAP {
    pub dwFlags: u32,
    pub stride: u32,
    pub freeList: *mut core::ffi::c_void,
    pub allocList: *mut core::ffi::c_void,
    pub dwTotalSize: u32,
    pub fpGARTLin: usize,
    pub fpGARTDev: usize,
    pub dwCommitedSize: u32,
    pub dwCoalesceCount: u32,
    pub Alignment: HEAPALIGNMENT,
    pub ddsCapsEx: DDSCAPSEX,
    pub ddsCapsExAlt: DDSCAPSEX,
    pub liPhysAGPBase: i64,
    pub hdevAGP: *mut core::ffi::c_void,
    pub pvPhysRsrv: *mut core::ffi::c_void,
    pub pAgpCommitMask: *mut core::ffi::c_void,
    pub dwAgpCommitMaskSize: u32,
}
import "golang.org/x/sys/windows"

type DDSCAPS struct {
	dwCaps uint32
}

type SURFACEALIGNMENT struct {
	Anonymous _Anonymous_e__Union
}

type HEAPALIGNMENT struct {
	dwSize uint32
	ddsCaps DDSCAPS
	dwReserved uint32
	ExecuteBuffer SURFACEALIGNMENT
	Overlay SURFACEALIGNMENT
	Texture SURFACEALIGNMENT
	ZBuffer SURFACEALIGNMENT
	AlphaBuffer SURFACEALIGNMENT
	Offscreen SURFACEALIGNMENT
	FlipTarget SURFACEALIGNMENT
}

type DDSCAPSEX struct {
	dwCaps2 uint32
	dwCaps3 uint32
	Anonymous _Anonymous_e__Union
}

type VMEMHEAP struct {
	dwFlags uint32
	stride uint32
	freeList uintptr
	allocList uintptr
	dwTotalSize uint32
	fpGARTLin uintptr
	fpGARTDev uintptr
	dwCommitedSize uint32
	dwCoalesceCount uint32
	Alignment HEAPALIGNMENT
	ddsCapsEx DDSCAPSEX
	ddsCapsExAlt DDSCAPSEX
	liPhysAGPBase int64
	hdevAGP uintptr
	pvPhysRsrv uintptr
	pAgpCommitMask uintptr
	dwAgpCommitMaskSize uint32
}
type
  DDSCAPS = record
    dwCaps: DWORD;
  end;

  SURFACEALIGNMENT = record
    Anonymous: _Anonymous_e__Union;
  end;

  HEAPALIGNMENT = record
    dwSize: DWORD;
    ddsCaps: DDSCAPS;
    dwReserved: DWORD;
    ExecuteBuffer: SURFACEALIGNMENT;
    Overlay: SURFACEALIGNMENT;
    Texture: SURFACEALIGNMENT;
    ZBuffer: SURFACEALIGNMENT;
    AlphaBuffer: SURFACEALIGNMENT;
    Offscreen: SURFACEALIGNMENT;
    FlipTarget: SURFACEALIGNMENT;
  end;

  DDSCAPSEX = record
    dwCaps2: DWORD;
    dwCaps3: DWORD;
    Anonymous: _Anonymous_e__Union;
  end;

  VMEMHEAP = record
    dwFlags: DWORD;
    stride: DWORD;
    freeList: Pointer;
    allocList: Pointer;
    dwTotalSize: DWORD;
    fpGARTLin: NativeUInt;
    fpGARTDev: NativeUInt;
    dwCommitedSize: DWORD;
    dwCoalesceCount: DWORD;
    Alignment: HEAPALIGNMENT;
    ddsCapsEx: DDSCAPSEX;
    ddsCapsExAlt: DDSCAPSEX;
    liPhysAGPBase: Int64;
    hdevAGP: Pointer;
    pvPhysRsrv: Pointer;
    pAgpCommitMask: Pointer;
    dwAgpCommitMaskSize: DWORD;
  end;
const DDSCAPS = extern struct {
    dwCaps: u32,
};

const SURFACEALIGNMENT = extern struct {
    Anonymous: _Anonymous_e__Union,
};

const HEAPALIGNMENT = extern struct {
    dwSize: u32,
    ddsCaps: DDSCAPS,
    dwReserved: u32,
    ExecuteBuffer: SURFACEALIGNMENT,
    Overlay: SURFACEALIGNMENT,
    Texture: SURFACEALIGNMENT,
    ZBuffer: SURFACEALIGNMENT,
    AlphaBuffer: SURFACEALIGNMENT,
    Offscreen: SURFACEALIGNMENT,
    FlipTarget: SURFACEALIGNMENT,
};

const DDSCAPSEX = extern struct {
    dwCaps2: u32,
    dwCaps3: u32,
    Anonymous: _Anonymous_e__Union,
};

const VMEMHEAP = extern struct {
    dwFlags: u32,
    stride: u32,
    freeList: ?*anyopaque,
    allocList: ?*anyopaque,
    dwTotalSize: u32,
    fpGARTLin: usize,
    fpGARTDev: usize,
    dwCommitedSize: u32,
    dwCoalesceCount: u32,
    Alignment: HEAPALIGNMENT,
    ddsCapsEx: DDSCAPSEX,
    ddsCapsExAlt: DDSCAPSEX,
    liPhysAGPBase: i64,
    hdevAGP: ?*anyopaque,
    pvPhysRsrv: ?*anyopaque,
    pAgpCommitMask: ?*anyopaque,
    dwAgpCommitMaskSize: u32,
};
type
  DDSCAPS {.bycopy.} = object
    dwCaps: uint32

  SURFACEALIGNMENT {.bycopy.} = object
    Anonymous: _Anonymous_e__Union

  HEAPALIGNMENT {.bycopy.} = object
    dwSize: uint32
    ddsCaps: DDSCAPS
    dwReserved: uint32
    ExecuteBuffer: SURFACEALIGNMENT
    Overlay: SURFACEALIGNMENT
    Texture: SURFACEALIGNMENT
    ZBuffer: SURFACEALIGNMENT
    AlphaBuffer: SURFACEALIGNMENT
    Offscreen: SURFACEALIGNMENT
    FlipTarget: SURFACEALIGNMENT

  DDSCAPSEX {.bycopy.} = object
    dwCaps2: uint32
    dwCaps3: uint32
    Anonymous: _Anonymous_e__Union

  VMEMHEAP {.bycopy.} = object
    dwFlags: uint32
    stride: uint32
    freeList: pointer
    allocList: pointer
    dwTotalSize: uint32
    fpGARTLin: uint
    fpGARTDev: uint
    dwCommitedSize: uint32
    dwCoalesceCount: uint32
    Alignment: HEAPALIGNMENT
    ddsCapsEx: DDSCAPSEX
    ddsCapsExAlt: DDSCAPSEX
    liPhysAGPBase: int64
    hdevAGP: pointer
    pvPhysRsrv: pointer
    pAgpCommitMask: pointer
    dwAgpCommitMaskSize: uint32
struct DDSCAPS
{
    uint dwCaps;
}

struct SURFACEALIGNMENT
{
    _Anonymous_e__Union Anonymous;
}

struct HEAPALIGNMENT
{
    uint dwSize;
    DDSCAPS ddsCaps;
    uint dwReserved;
    SURFACEALIGNMENT ExecuteBuffer;
    SURFACEALIGNMENT Overlay;
    SURFACEALIGNMENT Texture;
    SURFACEALIGNMENT ZBuffer;
    SURFACEALIGNMENT AlphaBuffer;
    SURFACEALIGNMENT Offscreen;
    SURFACEALIGNMENT FlipTarget;
}

struct DDSCAPSEX
{
    uint dwCaps2;
    uint dwCaps3;
    _Anonymous_e__Union Anonymous;
}

struct VMEMHEAP
{
    uint dwFlags;
    uint stride;
    void* freeList;
    void* allocList;
    uint dwTotalSize;
    size_t fpGARTLin;
    size_t fpGARTDev;
    uint dwCommitedSize;
    uint dwCoalesceCount;
    HEAPALIGNMENT Alignment;
    DDSCAPSEX ddsCapsEx;
    DDSCAPSEX ddsCapsExAlt;
    long liPhysAGPBase;
    void* hdevAGP;
    void* pvPhysRsrv;
    void* pAgpCommitMask;
    uint dwAgpCommitMaskSize;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; VMEMHEAP サイズ: 128 バイト(x86)
dim st, 32    ; 4byte整数×32(構造体サイズ 128 / 4 切り上げ)
; dwFlags : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; stride : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; freeList : void* (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; allocList : void* (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwTotalSize : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; fpGARTLin : UINT_PTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; fpGARTDev : UINT_PTR (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwCommitedSize : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwCoalesceCount : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; Alignment : HEAPALIGNMENT (+36, 40byte)  varptr(st)+36 を基点に操作(40byte:入れ子/配列)
; ddsCapsEx : DDSCAPSEX (+76, 12byte)  varptr(st)+76 を基点に操作(12byte:入れ子/配列)
; ddsCapsExAlt : DDSCAPSEX (+88, 12byte)  varptr(st)+88 を基点に操作(12byte:入れ子/配列)
; liPhysAGPBase : LONGLONG (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; hdevAGP : HANDLE (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; pvPhysRsrv : void* (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; pAgpCommitMask : BYTE* (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; dwAgpCommitMaskSize : DWORD (+124, 4byte)  st.31 = 値  /  値 = st.31   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; VMEMHEAP サイズ: 192 バイト(x64)
dim st, 48    ; 4byte整数×48(構造体サイズ 192 / 4 切り上げ)
; dwFlags : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; stride : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; freeList : void* (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; allocList : void* (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; dwTotalSize : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; fpGARTLin : UINT_PTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; fpGARTDev : UINT_PTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; dwCommitedSize : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwCoalesceCount : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; Alignment : HEAPALIGNMENT (+56, 72byte)  varptr(st)+56 を基点に操作(72byte:入れ子/配列)
; ddsCapsEx : DDSCAPSEX (+128, 12byte)  varptr(st)+128 を基点に操作(12byte:入れ子/配列)
; ddsCapsExAlt : DDSCAPSEX (+140, 12byte)  varptr(st)+140 を基点に操作(12byte:入れ子/配列)
; liPhysAGPBase : LONGLONG (+152, 8byte)  qpoke st,152,値 / qpeek(st,152)  ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; hdevAGP : HANDLE (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; pvPhysRsrv : void* (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; pAgpCommitMask : BYTE* (+176, 8byte)  qpoke st,176,値 / qpeek(st,176)  ※IronHSPのみ。3.7/3.8は lpoke st,176,下位 : lpoke st,180,上位
; dwAgpCommitMaskSize : DWORD (+184, 4byte)  st.46 = 値  /  値 = st.46   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DDSCAPS
    #field int dwCaps
#endstruct

#defstruct global SURFACEALIGNMENT
    #field byte Anonymous 8
#endstruct

#defstruct global HEAPALIGNMENT
    #field int dwSize
    #field DDSCAPS ddsCaps
    #field int dwReserved
    #field SURFACEALIGNMENT ExecuteBuffer
    #field SURFACEALIGNMENT Overlay
    #field SURFACEALIGNMENT Texture
    #field SURFACEALIGNMENT ZBuffer
    #field SURFACEALIGNMENT AlphaBuffer
    #field SURFACEALIGNMENT Offscreen
    #field SURFACEALIGNMENT FlipTarget
#endstruct

#defstruct global DDSCAPSEX
    #field int dwCaps2
    #field int dwCaps3
    #field byte Anonymous 4
#endstruct

#defstruct global VMEMHEAP
    #field int dwFlags
    #field int stride
    #field intptr freeList
    #field intptr allocList
    #field int dwTotalSize
    #field intptr fpGARTLin
    #field intptr fpGARTDev
    #field int dwCommitedSize
    #field int dwCoalesceCount
    #field HEAPALIGNMENT Alignment
    #field DDSCAPSEX ddsCapsEx
    #field DDSCAPSEX ddsCapsExAlt
    #field int64 liPhysAGPBase
    #field intptr hdevAGP
    #field intptr pvPhysRsrv
    #field intptr pAgpCommitMask
    #field int dwAgpCommitMaskSize
#endstruct

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