Win32 API 日本語リファレンス
ホームDevices.ImageAcquisition › VAL

VAL

構造体
サイズx64: 320 バイト / x86: 296 バイト

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

フィールド

フィールドサイズx64x86説明
lValINT4+0+0整数値を保持する共用体メンバ。
dblValDOUBLE8+8+8倍精度浮動小数点値を保持する共用体メンバ。
pGuidGUID*8/4+16+16GUID値へのポインタを保持する共用体メンバ。
pScanInfoSCANINFO*8/4+24+20SCANINFO構造体へのポインタを保持する共用体メンバ。
handleHGLOBAL8/4+32+24グローバルメモリハンドル(HGLOBAL)を保持する共用体メンバ。
ppButtonNamesWORD**8/4+40+28ボタン名文字列配列へのポインタを保持する共用体メンバ。
pHandleHANDLE*8/4+48+32ハンドルへのポインタを保持する共用体メンバ。
lReservedINT4+56+36予約メンバ。0を設定する。
szValCHAR255+60+40文字列バッファ(CHAR)として用いる共用体メンバ。

各言語での定義

#include <windows.h>

// VAL  (x64 320 / x86 296 バイト)
typedef struct VAL {
    INT lVal;
    DOUBLE dblVal;
    GUID* pGuid;
    SCANINFO* pScanInfo;
    HGLOBAL handle;
    WORD** ppButtonNames;
    HANDLE* pHandle;
    INT lReserved;
    CHAR szVal[255];
} VAL;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct VAL
{
    public int lVal;
    public double dblVal;
    public IntPtr pGuid;
    public IntPtr pScanInfo;
    public IntPtr handle;
    public IntPtr ppButtonNames;
    public IntPtr pHandle;
    public int lReserved;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 255)] public sbyte[] szVal;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure VAL
    Public lVal As Integer
    Public dblVal As Double
    Public pGuid As IntPtr
    Public pScanInfo As IntPtr
    Public handle As IntPtr
    Public ppButtonNames As IntPtr
    Public pHandle As IntPtr
    Public lReserved As Integer
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=255)> Public szVal() As SByte
End Structure
import ctypes
from ctypes import wintypes

class VAL(ctypes.Structure):
    _fields_ = [
        ("lVal", ctypes.c_int),
        ("dblVal", ctypes.c_double),
        ("pGuid", ctypes.c_void_p),
        ("pScanInfo", ctypes.c_void_p),
        ("handle", ctypes.c_void_p),
        ("ppButtonNames", ctypes.c_void_p),
        ("pHandle", ctypes.c_void_p),
        ("lReserved", ctypes.c_int),
        ("szVal", ctypes.c_byte * 255),
    ]
#[repr(C)]
pub struct VAL {
    pub lVal: i32,
    pub dblVal: f64,
    pub pGuid: *mut core::ffi::c_void,
    pub pScanInfo: *mut core::ffi::c_void,
    pub handle: *mut core::ffi::c_void,
    pub ppButtonNames: *mut core::ffi::c_void,
    pub pHandle: *mut core::ffi::c_void,
    pub lReserved: i32,
    pub szVal: [i8; 255],
}
import "golang.org/x/sys/windows"

type VAL struct {
	lVal int32
	dblVal float64
	pGuid uintptr
	pScanInfo uintptr
	handle uintptr
	ppButtonNames uintptr
	pHandle uintptr
	lReserved int32
	szVal [255]int8
}
type
  VAL = record
    lVal: Integer;
    dblVal: Double;
    pGuid: Pointer;
    pScanInfo: Pointer;
    handle: Pointer;
    ppButtonNames: Pointer;
    pHandle: Pointer;
    lReserved: Integer;
    szVal: array[0..254] of Shortint;
  end;
const VAL = extern struct {
    lVal: i32,
    dblVal: f64,
    pGuid: ?*anyopaque,
    pScanInfo: ?*anyopaque,
    handle: ?*anyopaque,
    ppButtonNames: ?*anyopaque,
    pHandle: ?*anyopaque,
    lReserved: i32,
    szVal: [255]i8,
};
type
  VAL {.bycopy.} = object
    lVal: int32
    dblVal: float64
    pGuid: pointer
    pScanInfo: pointer
    handle: pointer
    ppButtonNames: pointer
    pHandle: pointer
    lReserved: int32
    szVal: array[255, int8]
struct VAL
{
    int lVal;
    double dblVal;
    void* pGuid;
    void* pScanInfo;
    void* handle;
    void* ppButtonNames;
    void* pHandle;
    int lReserved;
    byte[255] szVal;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; VAL サイズ: 296 バイト(x86)
dim st, 74    ; 4byte整数×74(構造体サイズ 296 / 4 切り上げ)
; lVal : INT (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dblVal : DOUBLE (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pGuid : GUID* (+16, 4byte)  varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; pScanInfo : SCANINFO* (+20, 4byte)  varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; handle : HGLOBAL (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ppButtonNames : WORD** (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; pHandle : HANDLE* (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; lReserved : INT (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; szVal : CHAR (+40, 255byte)  varptr(st)+40 を基点に操作(255byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; VAL サイズ: 320 バイト(x64)
dim st, 80    ; 4byte整数×80(構造体サイズ 320 / 4 切り上げ)
; lVal : INT (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dblVal : DOUBLE (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pGuid : GUID* (+16, 8byte)  varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; pScanInfo : SCANINFO* (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; handle : HGLOBAL (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; ppButtonNames : WORD** (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; pHandle : HANDLE* (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; lReserved : INT (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; szVal : CHAR (+60, 255byte)  varptr(st)+60 を基点に操作(255byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global VAL
    #field int lVal
    #field double dblVal
    #field intptr pGuid
    #field intptr pScanInfo
    #field intptr handle
    #field intptr ppButtonNames
    #field intptr pHandle
    #field int lReserved
    #field byte szVal 255
#endstruct

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