ホーム › Graphics.DirectDraw › VMEMHEAP
VMEMHEAP
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwFlags | DWORD | 4 | +0 | +0 | ヒープの種別/属性を示すフラグの組み合わせ。 |
| stride | DWORD | 4 | +4 | +4 | 矩形ヒープにおける1ラインのバイト幅を示す。 |
| freeList | void* | 8/4 | +8 | +8 | 空き領域リストの先頭へのポインタを示す。 |
| allocList | void* | 8/4 | +16 | +12 | 確保済み領域リストの先頭へのポインタを示す。 |
| dwTotalSize | DWORD | 4 | +24 | +16 | ヒープの総サイズ(バイト)を示す。 |
| fpGARTLin | UINT_PTR | 8/4 | +32 | +20 | AGP/GARTのリニアアドレス基準値を示す。 |
| fpGARTDev | UINT_PTR | 8/4 | +40 | +24 | AGP/GARTのデバイスアドレス基準値を示す。 |
| dwCommitedSize | DWORD | 4 | +48 | +28 | 現在コミット済みのサイズ(バイト)を示す。 |
| dwCoalesceCount | DWORD | 4 | +52 | +32 | 空き領域の結合(合体)回数を示す。 |
| Alignment | HEAPALIGNMENT | 72/40 | +56 | +36 | このヒープに適用されるアライメント情報(HEAPALIGNMENT)。 |
| ddsCapsEx | DDSCAPSEX | 12 | +128 | +76 | 拡張サーフェス能力(DDSCAPSEX)を示す。 |
| ddsCapsExAlt | DDSCAPSEX | 12 | +140 | +88 | 代替の拡張サーフェス能力(DDSCAPSEX)を示す。 |
| liPhysAGPBase | LONGLONG | 8 | +152 | +104 | AGPメモリの物理ベースアドレスを示す。 |
| hdevAGP | HANDLE | 8/4 | +160 | +112 | AGPデバイスのハンドルを示す。 |
| pvPhysRsrv | void* | 8/4 | +168 | +116 | 予約された物理メモリ領域へのポインタを示す。 |
| pAgpCommitMask | BYTE* | 8/4 | +176 | +120 | AGPコミット状態を表すビットマスク配列へのポインタ。 |
| dwAgpCommitMaskSize | DWORD | 4 | +184 | +124 | AGPコミットマスクのサイズ(バイト)を示す。 |
各言語での定義
#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 Structureimport 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: uint32struct 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