ホーム › Graphics.DirectDraw › DDRAWI_DIRECTDRAW_LCL
DDRAWI_DIRECTDRAW_LCL
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| lpDDMore | DWORD | 4 | +0 | +0 | 追加ローカル情報へのポインタ(予約)を示す。 |
| lpGbl | DDRAWI_DIRECTDRAW_GBL* | 8/4 | +8 | +4 | 対応するグローバルDirectDrawオブジェクトへのポインタ。 |
| dwUnused0 | DWORD | 4 | +16 | +8 | 未使用の予約フィールド。 |
| dwLocalFlags | DWORD | 4 | +20 | +12 | ローカルDirectDrawオブジェクトの属性フラグを示す。 |
| dwLocalRefCnt | DWORD | 4 | +24 | +16 | ローカルオブジェクトの参照カウントを示す。 |
| dwProcessId | DWORD | 4 | +28 | +20 | このオブジェクトを所有するプロセスの識別子を示す。 |
| pUnkOuter | IUnknown* | 8/4 | +32 | +24 | アグリゲーション時の外部IUnknownへのポインタ。NULL可。 |
| dwObsolete1 | DWORD | 4 | +40 | +28 | 廃止された予約フィールドを示す。 |
| hWnd | UINT_PTR | 8/4 | +48 | +32 | 協調レベル設定に用いたウィンドウハンドルを示す。 |
| hDC | UINT_PTR | 8/4 | +56 | +36 | 関連付けられたデバイスコンテキストハンドルを示す。 |
| dwErrorMode | DWORD | 4 | +64 | +40 | ドライバ呼び出し時のエラーモードを示す。 |
| lpPrimary | DDRAWI_DDRAWSURFACE_INT* | 8/4 | +72 | +44 | プライマリサーフェスのインターフェイスへのポインタ。NULL可。 |
| lpCB | DDRAWI_DDRAWSURFACE_INT* | 8/4 | +80 | +48 | 現在のバックバッファサーフェスへのポインタを示す。NULL可。 |
| dwPreferredMode | DWORD | 4 | +88 | +52 | 優先するディスプレイモードのインデックスを示す。 |
| hD3DInstance | HINSTANCE | 8/4 | +96 | +56 | Direct3DドライバDLLのインスタンスハンドルを示す。 |
| pD3DIUnknown | IUnknown* | 8/4 | +104 | +60 | Direct3DオブジェクトのIUnknownへのポインタ。NULL可。 |
| lpDDCB | DDHAL_CALLBACKS* | 8/4 | +112 | +64 | このオブジェクト用のHALコールバック群へのポインタ。 |
| hDDVxd | UINT_PTR | 8/4 | +120 | +68 | DirectDraw VxDのハンドルを示す。 |
| dwAppHackFlags | DWORD | 4 | +128 | +72 | アプリ互換のための回避フラグを示す。 |
| hFocusWnd | UINT_PTR | 8/4 | +136 | +76 | フォーカスウィンドウのハンドルを示す。 |
| dwHotTracking | DWORD | 4 | +144 | +80 | ホットトラッキング状態を示す値。 |
| dwIMEState | DWORD | 4 | +148 | +84 | IME(入力メソッド)の状態を示す。 |
| hWndPopup | UINT_PTR | 8/4 | +152 | +88 | ポップアップウィンドウのハンドルを示す。 |
| hDD | UINT_PTR | 8/4 | +160 | +92 | ドライバが用いるDirectDrawハンドルを示す。 |
| hGammaCalibrator | UINT_PTR | 8/4 | +168 | +96 | ガンマ較正器モジュールのハンドルを示す。 |
| lpGammaCalibrator | LPDDGAMMACALIBRATORPROC | 8/4 | +176 | +100 | ガンマ較正コールバック関数へのポインタを示す。 |
各言語での定義
#include <windows.h>
// DDRAWI_DIRECTDRAW_LCL (x64 184 / x86 104 バイト)
typedef struct DDRAWI_DIRECTDRAW_LCL {
DWORD lpDDMore;
DDRAWI_DIRECTDRAW_GBL* lpGbl;
DWORD dwUnused0;
DWORD dwLocalFlags;
DWORD dwLocalRefCnt;
DWORD dwProcessId;
IUnknown* pUnkOuter;
DWORD dwObsolete1;
UINT_PTR hWnd;
UINT_PTR hDC;
DWORD dwErrorMode;
DDRAWI_DDRAWSURFACE_INT* lpPrimary;
DDRAWI_DDRAWSURFACE_INT* lpCB;
DWORD dwPreferredMode;
HINSTANCE hD3DInstance;
IUnknown* pD3DIUnknown;
DDHAL_CALLBACKS* lpDDCB;
UINT_PTR hDDVxd;
DWORD dwAppHackFlags;
UINT_PTR hFocusWnd;
DWORD dwHotTracking;
DWORD dwIMEState;
UINT_PTR hWndPopup;
UINT_PTR hDD;
UINT_PTR hGammaCalibrator;
LPDDGAMMACALIBRATORPROC lpGammaCalibrator;
} DDRAWI_DIRECTDRAW_LCL;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDRAWI_DIRECTDRAW_LCL
{
public uint lpDDMore;
public IntPtr lpGbl;
public uint dwUnused0;
public uint dwLocalFlags;
public uint dwLocalRefCnt;
public uint dwProcessId;
public IntPtr pUnkOuter;
public uint dwObsolete1;
public UIntPtr hWnd;
public UIntPtr hDC;
public uint dwErrorMode;
public IntPtr lpPrimary;
public IntPtr lpCB;
public uint dwPreferredMode;
public IntPtr hD3DInstance;
public IntPtr pD3DIUnknown;
public IntPtr lpDDCB;
public UIntPtr hDDVxd;
public uint dwAppHackFlags;
public UIntPtr hFocusWnd;
public uint dwHotTracking;
public uint dwIMEState;
public UIntPtr hWndPopup;
public UIntPtr hDD;
public UIntPtr hGammaCalibrator;
public IntPtr lpGammaCalibrator;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDRAWI_DIRECTDRAW_LCL
Public lpDDMore As UInteger
Public lpGbl As IntPtr
Public dwUnused0 As UInteger
Public dwLocalFlags As UInteger
Public dwLocalRefCnt As UInteger
Public dwProcessId As UInteger
Public pUnkOuter As IntPtr
Public dwObsolete1 As UInteger
Public hWnd As UIntPtr
Public hDC As UIntPtr
Public dwErrorMode As UInteger
Public lpPrimary As IntPtr
Public lpCB As IntPtr
Public dwPreferredMode As UInteger
Public hD3DInstance As IntPtr
Public pD3DIUnknown As IntPtr
Public lpDDCB As IntPtr
Public hDDVxd As UIntPtr
Public dwAppHackFlags As UInteger
Public hFocusWnd As UIntPtr
Public dwHotTracking As UInteger
Public dwIMEState As UInteger
Public hWndPopup As UIntPtr
Public hDD As UIntPtr
Public hGammaCalibrator As UIntPtr
Public lpGammaCalibrator As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class DDRAWI_DIRECTDRAW_LCL(ctypes.Structure):
_fields_ = [
("lpDDMore", wintypes.DWORD),
("lpGbl", ctypes.c_void_p),
("dwUnused0", wintypes.DWORD),
("dwLocalFlags", wintypes.DWORD),
("dwLocalRefCnt", wintypes.DWORD),
("dwProcessId", wintypes.DWORD),
("pUnkOuter", ctypes.c_void_p),
("dwObsolete1", wintypes.DWORD),
("hWnd", ctypes.c_size_t),
("hDC", ctypes.c_size_t),
("dwErrorMode", wintypes.DWORD),
("lpPrimary", ctypes.c_void_p),
("lpCB", ctypes.c_void_p),
("dwPreferredMode", wintypes.DWORD),
("hD3DInstance", ctypes.c_void_p),
("pD3DIUnknown", ctypes.c_void_p),
("lpDDCB", ctypes.c_void_p),
("hDDVxd", ctypes.c_size_t),
("dwAppHackFlags", wintypes.DWORD),
("hFocusWnd", ctypes.c_size_t),
("dwHotTracking", wintypes.DWORD),
("dwIMEState", wintypes.DWORD),
("hWndPopup", ctypes.c_size_t),
("hDD", ctypes.c_size_t),
("hGammaCalibrator", ctypes.c_size_t),
("lpGammaCalibrator", ctypes.c_void_p),
]#[repr(C)]
pub struct DDRAWI_DIRECTDRAW_LCL {
pub lpDDMore: u32,
pub lpGbl: *mut core::ffi::c_void,
pub dwUnused0: u32,
pub dwLocalFlags: u32,
pub dwLocalRefCnt: u32,
pub dwProcessId: u32,
pub pUnkOuter: *mut core::ffi::c_void,
pub dwObsolete1: u32,
pub hWnd: usize,
pub hDC: usize,
pub dwErrorMode: u32,
pub lpPrimary: *mut core::ffi::c_void,
pub lpCB: *mut core::ffi::c_void,
pub dwPreferredMode: u32,
pub hD3DInstance: *mut core::ffi::c_void,
pub pD3DIUnknown: *mut core::ffi::c_void,
pub lpDDCB: *mut core::ffi::c_void,
pub hDDVxd: usize,
pub dwAppHackFlags: u32,
pub hFocusWnd: usize,
pub dwHotTracking: u32,
pub dwIMEState: u32,
pub hWndPopup: usize,
pub hDD: usize,
pub hGammaCalibrator: usize,
pub lpGammaCalibrator: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type DDRAWI_DIRECTDRAW_LCL struct {
lpDDMore uint32
lpGbl uintptr
dwUnused0 uint32
dwLocalFlags uint32
dwLocalRefCnt uint32
dwProcessId uint32
pUnkOuter uintptr
dwObsolete1 uint32
hWnd uintptr
hDC uintptr
dwErrorMode uint32
lpPrimary uintptr
lpCB uintptr
dwPreferredMode uint32
hD3DInstance uintptr
pD3DIUnknown uintptr
lpDDCB uintptr
hDDVxd uintptr
dwAppHackFlags uint32
hFocusWnd uintptr
dwHotTracking uint32
dwIMEState uint32
hWndPopup uintptr
hDD uintptr
hGammaCalibrator uintptr
lpGammaCalibrator uintptr
}type
DDRAWI_DIRECTDRAW_LCL = record
lpDDMore: DWORD;
lpGbl: Pointer;
dwUnused0: DWORD;
dwLocalFlags: DWORD;
dwLocalRefCnt: DWORD;
dwProcessId: DWORD;
pUnkOuter: Pointer;
dwObsolete1: DWORD;
hWnd: NativeUInt;
hDC: NativeUInt;
dwErrorMode: DWORD;
lpPrimary: Pointer;
lpCB: Pointer;
dwPreferredMode: DWORD;
hD3DInstance: Pointer;
pD3DIUnknown: Pointer;
lpDDCB: Pointer;
hDDVxd: NativeUInt;
dwAppHackFlags: DWORD;
hFocusWnd: NativeUInt;
dwHotTracking: DWORD;
dwIMEState: DWORD;
hWndPopup: NativeUInt;
hDD: NativeUInt;
hGammaCalibrator: NativeUInt;
lpGammaCalibrator: Pointer;
end;const DDRAWI_DIRECTDRAW_LCL = extern struct {
lpDDMore: u32,
lpGbl: ?*anyopaque,
dwUnused0: u32,
dwLocalFlags: u32,
dwLocalRefCnt: u32,
dwProcessId: u32,
pUnkOuter: ?*anyopaque,
dwObsolete1: u32,
hWnd: usize,
hDC: usize,
dwErrorMode: u32,
lpPrimary: ?*anyopaque,
lpCB: ?*anyopaque,
dwPreferredMode: u32,
hD3DInstance: ?*anyopaque,
pD3DIUnknown: ?*anyopaque,
lpDDCB: ?*anyopaque,
hDDVxd: usize,
dwAppHackFlags: u32,
hFocusWnd: usize,
dwHotTracking: u32,
dwIMEState: u32,
hWndPopup: usize,
hDD: usize,
hGammaCalibrator: usize,
lpGammaCalibrator: ?*anyopaque,
};type
DDRAWI_DIRECTDRAW_LCL {.bycopy.} = object
lpDDMore: uint32
lpGbl: pointer
dwUnused0: uint32
dwLocalFlags: uint32
dwLocalRefCnt: uint32
dwProcessId: uint32
pUnkOuter: pointer
dwObsolete1: uint32
hWnd: uint
hDC: uint
dwErrorMode: uint32
lpPrimary: pointer
lpCB: pointer
dwPreferredMode: uint32
hD3DInstance: pointer
pD3DIUnknown: pointer
lpDDCB: pointer
hDDVxd: uint
dwAppHackFlags: uint32
hFocusWnd: uint
dwHotTracking: uint32
dwIMEState: uint32
hWndPopup: uint
hDD: uint
hGammaCalibrator: uint
lpGammaCalibrator: pointerstruct DDRAWI_DIRECTDRAW_LCL
{
uint lpDDMore;
void* lpGbl;
uint dwUnused0;
uint dwLocalFlags;
uint dwLocalRefCnt;
uint dwProcessId;
void* pUnkOuter;
uint dwObsolete1;
size_t hWnd;
size_t hDC;
uint dwErrorMode;
void* lpPrimary;
void* lpCB;
uint dwPreferredMode;
void* hD3DInstance;
void* pD3DIUnknown;
void* lpDDCB;
size_t hDDVxd;
uint dwAppHackFlags;
size_t hFocusWnd;
uint dwHotTracking;
uint dwIMEState;
size_t hWndPopup;
size_t hDD;
size_t hGammaCalibrator;
void* lpGammaCalibrator;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DDRAWI_DIRECTDRAW_LCL サイズ: 104 バイト(x86)
dim st, 26 ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; lpDDMore : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; lpGbl : DDRAWI_DIRECTDRAW_GBL* (+4, 4byte) varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; dwUnused0 : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwLocalFlags : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dwLocalRefCnt : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwProcessId : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; pUnkOuter : IUnknown* (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; dwObsolete1 : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; hWnd : UINT_PTR (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; hDC : UINT_PTR (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; dwErrorMode : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; lpPrimary : DDRAWI_DDRAWSURFACE_INT* (+44, 4byte) varptr(st)+44 を基点に操作(4byte:入れ子/配列)
; lpCB : DDRAWI_DDRAWSURFACE_INT* (+48, 4byte) varptr(st)+48 を基点に操作(4byte:入れ子/配列)
; dwPreferredMode : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; hD3DInstance : HINSTANCE (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; pD3DIUnknown : IUnknown* (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; lpDDCB : DDHAL_CALLBACKS* (+64, 4byte) varptr(st)+64 を基点に操作(4byte:入れ子/配列)
; hDDVxd : UINT_PTR (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; dwAppHackFlags : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; hFocusWnd : UINT_PTR (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; dwHotTracking : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; dwIMEState : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; hWndPopup : UINT_PTR (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; hDD : UINT_PTR (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; hGammaCalibrator : UINT_PTR (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; lpGammaCalibrator : LPDDGAMMACALIBRATORPROC (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DDRAWI_DIRECTDRAW_LCL サイズ: 184 バイト(x64)
dim st, 46 ; 4byte整数×46(構造体サイズ 184 / 4 切り上げ)
; lpDDMore : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; lpGbl : DDRAWI_DIRECTDRAW_GBL* (+8, 8byte) varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; dwUnused0 : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwLocalFlags : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwLocalRefCnt : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; dwProcessId : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; pUnkOuter : IUnknown* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; dwObsolete1 : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; hWnd : UINT_PTR (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; hDC : UINT_PTR (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; dwErrorMode : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; lpPrimary : DDRAWI_DDRAWSURFACE_INT* (+72, 8byte) varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; lpCB : DDRAWI_DDRAWSURFACE_INT* (+80, 8byte) varptr(st)+80 を基点に操作(8byte:入れ子/配列)
; dwPreferredMode : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; hD3DInstance : HINSTANCE (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; pD3DIUnknown : IUnknown* (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; lpDDCB : DDHAL_CALLBACKS* (+112, 8byte) varptr(st)+112 を基点に操作(8byte:入れ子/配列)
; hDDVxd : UINT_PTR (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; dwAppHackFlags : DWORD (+128, 4byte) st.32 = 値 / 値 = st.32 (lpoke/lpeek も可)
; hFocusWnd : UINT_PTR (+136, 8byte) qpoke st,136,値 / qpeek(st,136) ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; dwHotTracking : DWORD (+144, 4byte) st.36 = 値 / 値 = st.36 (lpoke/lpeek も可)
; dwIMEState : DWORD (+148, 4byte) st.37 = 値 / 値 = st.37 (lpoke/lpeek も可)
; hWndPopup : UINT_PTR (+152, 8byte) qpoke st,152,値 / qpeek(st,152) ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; hDD : UINT_PTR (+160, 8byte) qpoke st,160,値 / qpeek(st,160) ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; hGammaCalibrator : UINT_PTR (+168, 8byte) qpoke st,168,値 / qpeek(st,168) ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; lpGammaCalibrator : LPDDGAMMACALIBRATORPROC (+176, 8byte) qpoke st,176,値 / qpeek(st,176) ※IronHSPのみ。3.7/3.8は lpoke st,176,下位 : lpoke st,180,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DDRAWI_DIRECTDRAW_LCL
#field int lpDDMore
#field intptr lpGbl
#field int dwUnused0
#field int dwLocalFlags
#field int dwLocalRefCnt
#field int dwProcessId
#field intptr pUnkOuter
#field int dwObsolete1
#field intptr hWnd
#field intptr hDC
#field int dwErrorMode
#field intptr lpPrimary
#field intptr lpCB
#field int dwPreferredMode
#field intptr hD3DInstance
#field intptr pD3DIUnknown
#field intptr lpDDCB
#field intptr hDDVxd
#field int dwAppHackFlags
#field intptr hFocusWnd
#field int dwHotTracking
#field int dwIMEState
#field intptr hWndPopup
#field intptr hDD
#field intptr hGammaCalibrator
#field intptr lpGammaCalibrator
#endstruct
stdim st, DDRAWI_DIRECTDRAW_LCL ; NSTRUCT 変数を確保
st->lpDDMore = 100
mes "lpDDMore=" + st->lpDDMore