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

DD_SURFACE_MORE

構造体
サイズx64: 40 バイト / x86: 28 バイト

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

フィールド

フィールドサイズx64x86説明
dwMipMapCountDWORD4+0+0ミップマップチェーンのレベル数。
lpVideoPortDD_VIDEOPORT_LOCAL*8/4+8+4このサーフェスに関連付けられたビデオポートローカルオブジェクトへのポインタ。NULL可。
dwOverlayFlagsDWORD4+16+8オーバーレイ動作を制御するフラグ。
ddsCapsExDDSCAPSEX12+20+12拡張サーフェス能力を示すDDSCAPSEX。
dwSurfaceHandleDWORD4+32+24カーネルモードで用いるサーフェスハンドル。

各言語での定義

#include <windows.h>

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

// DD_SURFACE_MORE  (x64 40 / x86 28 バイト)
typedef struct DD_SURFACE_MORE {
    DWORD dwMipMapCount;
    DD_VIDEOPORT_LOCAL* lpVideoPort;
    DWORD dwOverlayFlags;
    DDSCAPSEX ddsCapsEx;
    DWORD dwSurfaceHandle;
} DD_SURFACE_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 DD_SURFACE_MORE
{
    public uint dwMipMapCount;
    public IntPtr lpVideoPort;
    public uint dwOverlayFlags;
    public DDSCAPSEX ddsCapsEx;
    public uint dwSurfaceHandle;
}
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 DD_SURFACE_MORE
    Public dwMipMapCount As UInteger
    Public lpVideoPort As IntPtr
    Public dwOverlayFlags As UInteger
    Public ddsCapsEx As DDSCAPSEX
    Public dwSurfaceHandle As UInteger
End Structure
import ctypes
from ctypes import wintypes

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

class DD_SURFACE_MORE(ctypes.Structure):
    _fields_ = [
        ("dwMipMapCount", wintypes.DWORD),
        ("lpVideoPort", ctypes.c_void_p),
        ("dwOverlayFlags", wintypes.DWORD),
        ("ddsCapsEx", DDSCAPSEX),
        ("dwSurfaceHandle", wintypes.DWORD),
    ]
#[repr(C)]
pub struct DDSCAPSEX {
    pub dwCaps2: u32,
    pub dwCaps3: u32,
    pub Anonymous: _Anonymous_e__Union,
}

#[repr(C)]
pub struct DD_SURFACE_MORE {
    pub dwMipMapCount: u32,
    pub lpVideoPort: *mut core::ffi::c_void,
    pub dwOverlayFlags: u32,
    pub ddsCapsEx: DDSCAPSEX,
    pub dwSurfaceHandle: u32,
}
import "golang.org/x/sys/windows"

type DDSCAPSEX struct {
	dwCaps2 uint32
	dwCaps3 uint32
	Anonymous _Anonymous_e__Union
}

type DD_SURFACE_MORE struct {
	dwMipMapCount uint32
	lpVideoPort uintptr
	dwOverlayFlags uint32
	ddsCapsEx DDSCAPSEX
	dwSurfaceHandle uint32
}
type
  DDSCAPSEX = record
    dwCaps2: DWORD;
    dwCaps3: DWORD;
    Anonymous: _Anonymous_e__Union;
  end;

  DD_SURFACE_MORE = record
    dwMipMapCount: DWORD;
    lpVideoPort: Pointer;
    dwOverlayFlags: DWORD;
    ddsCapsEx: DDSCAPSEX;
    dwSurfaceHandle: DWORD;
  end;
const DDSCAPSEX = extern struct {
    dwCaps2: u32,
    dwCaps3: u32,
    Anonymous: _Anonymous_e__Union,
};

const DD_SURFACE_MORE = extern struct {
    dwMipMapCount: u32,
    lpVideoPort: ?*anyopaque,
    dwOverlayFlags: u32,
    ddsCapsEx: DDSCAPSEX,
    dwSurfaceHandle: u32,
};
type
  DDSCAPSEX {.bycopy.} = object
    dwCaps2: uint32
    dwCaps3: uint32
    Anonymous: _Anonymous_e__Union

  DD_SURFACE_MORE {.bycopy.} = object
    dwMipMapCount: uint32
    lpVideoPort: pointer
    dwOverlayFlags: uint32
    ddsCapsEx: DDSCAPSEX
    dwSurfaceHandle: uint32
struct DDSCAPSEX
{
    uint dwCaps2;
    uint dwCaps3;
    _Anonymous_e__Union Anonymous;
}

struct DD_SURFACE_MORE
{
    uint dwMipMapCount;
    void* lpVideoPort;
    uint dwOverlayFlags;
    DDSCAPSEX ddsCapsEx;
    uint dwSurfaceHandle;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DD_SURFACE_MORE サイズ: 28 バイト(x86)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; dwMipMapCount : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpVideoPort : DD_VIDEOPORT_LOCAL* (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; dwOverlayFlags : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; ddsCapsEx : DDSCAPSEX (+12, 12byte)  varptr(st)+12 を基点に操作(12byte:入れ子/配列)
; dwSurfaceHandle : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DD_SURFACE_MORE サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; dwMipMapCount : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; lpVideoPort : DD_VIDEOPORT_LOCAL* (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; dwOverlayFlags : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ddsCapsEx : DDSCAPSEX (+20, 12byte)  varptr(st)+20 を基点に操作(12byte:入れ子/配列)
; dwSurfaceHandle : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ※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 DD_SURFACE_MORE
    #field int dwMipMapCount
    #field intptr lpVideoPort
    #field int dwOverlayFlags
    #field DDSCAPSEX ddsCapsEx
    #field int dwSurfaceHandle
#endstruct

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