ホーム › Devices.ImageAcquisition › VAL
VAL
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| lVal | INT | 4 | +0 | +0 | 整数値を保持する共用体メンバ。 |
| dblVal | DOUBLE | 8 | +8 | +8 | 倍精度浮動小数点値を保持する共用体メンバ。 |
| pGuid | GUID* | 8/4 | +16 | +16 | GUID値へのポインタを保持する共用体メンバ。 |
| pScanInfo | SCANINFO* | 8/4 | +24 | +20 | SCANINFO構造体へのポインタを保持する共用体メンバ。 |
| handle | HGLOBAL | 8/4 | +32 | +24 | グローバルメモリハンドル(HGLOBAL)を保持する共用体メンバ。 |
| ppButtonNames | WORD** | 8/4 | +40 | +28 | ボタン名文字列配列へのポインタを保持する共用体メンバ。 |
| pHandle | HANDLE* | 8/4 | +48 | +32 | ハンドルへのポインタを保持する共用体メンバ。 |
| lReserved | INT | 4 | +56 | +36 | 予約メンバ。0を設定する。 |
| szVal | CHAR | 255 | +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 Structureimport 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