Win32 API 日本語リファレンス
ホームStorage.Jet › JET_RECSIZE

JET_RECSIZE

構造体
サイズx64: 64 バイト / x86: 64 バイトパッキング4

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

フィールド

フィールドサイズx64x86説明
cbDataULONGLONG8+0+0レコードの固定列・可変列データの合計バイト数。
cbLongValueDataULONGLONG8+8+8ロング値(BLOB等)のデータ合計バイト数。
cbOverheadULONGLONG8+16+16レコードのオーバーヘッド(管理領域)バイト数。
cbLongValueOverheadULONGLONG8+24+24ロング値に伴うオーバーヘッドバイト数。
cNonTaggedColumnsULONGLONG8+32+32タグなし列(固定/可変列)の数。
cTaggedColumnsULONGLONG8+40+40タグ付き列の数。
cLongValuesULONGLONG8+48+48ロング値の個数。
cMultiValuesULONGLONG8+56+56多値列の値の総数。

各言語での定義

#include <windows.h>

// JET_RECSIZE  (x64 64 / x86 64 バイト)
#pragma pack(push, 4)
typedef struct JET_RECSIZE {
    ULONGLONG cbData;
    ULONGLONG cbLongValueData;
    ULONGLONG cbOverhead;
    ULONGLONG cbLongValueOverhead;
    ULONGLONG cNonTaggedColumns;
    ULONGLONG cTaggedColumns;
    ULONGLONG cLongValues;
    ULONGLONG cMultiValues;
} JET_RECSIZE;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct JET_RECSIZE
{
    public ulong cbData;
    public ulong cbLongValueData;
    public ulong cbOverhead;
    public ulong cbLongValueOverhead;
    public ulong cNonTaggedColumns;
    public ulong cTaggedColumns;
    public ulong cLongValues;
    public ulong cMultiValues;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure JET_RECSIZE
    Public cbData As ULong
    Public cbLongValueData As ULong
    Public cbOverhead As ULong
    Public cbLongValueOverhead As ULong
    Public cNonTaggedColumns As ULong
    Public cTaggedColumns As ULong
    Public cLongValues As ULong
    Public cMultiValues As ULong
End Structure
import ctypes
from ctypes import wintypes

class JET_RECSIZE(ctypes.Structure):
    _pack_ = 4
    _fields_ = [
        ("cbData", ctypes.c_ulonglong),
        ("cbLongValueData", ctypes.c_ulonglong),
        ("cbOverhead", ctypes.c_ulonglong),
        ("cbLongValueOverhead", ctypes.c_ulonglong),
        ("cNonTaggedColumns", ctypes.c_ulonglong),
        ("cTaggedColumns", ctypes.c_ulonglong),
        ("cLongValues", ctypes.c_ulonglong),
        ("cMultiValues", ctypes.c_ulonglong),
    ]
#[repr(C, packed(4))]
pub struct JET_RECSIZE {
    pub cbData: u64,
    pub cbLongValueData: u64,
    pub cbOverhead: u64,
    pub cbLongValueOverhead: u64,
    pub cNonTaggedColumns: u64,
    pub cTaggedColumns: u64,
    pub cLongValues: u64,
    pub cMultiValues: u64,
}
import "golang.org/x/sys/windows"

type JET_RECSIZE struct {
	cbData uint64
	cbLongValueData uint64
	cbOverhead uint64
	cbLongValueOverhead uint64
	cNonTaggedColumns uint64
	cTaggedColumns uint64
	cLongValues uint64
	cMultiValues uint64
}
type
  JET_RECSIZE = packed record
    cbData: UInt64;
    cbLongValueData: UInt64;
    cbOverhead: UInt64;
    cbLongValueOverhead: UInt64;
    cNonTaggedColumns: UInt64;
    cTaggedColumns: UInt64;
    cLongValues: UInt64;
    cMultiValues: UInt64;
  end;
const JET_RECSIZE = extern struct {
    cbData: u64,
    cbLongValueData: u64,
    cbOverhead: u64,
    cbLongValueOverhead: u64,
    cNonTaggedColumns: u64,
    cTaggedColumns: u64,
    cLongValues: u64,
    cMultiValues: u64,
};
type
  JET_RECSIZE {.packed.} = object
    cbData: uint64
    cbLongValueData: uint64
    cbOverhead: uint64
    cbLongValueOverhead: uint64
    cNonTaggedColumns: uint64
    cTaggedColumns: uint64
    cLongValues: uint64
    cMultiValues: uint64
align(4)
struct JET_RECSIZE
{
    ulong cbData;
    ulong cbLongValueData;
    ulong cbOverhead;
    ulong cbLongValueOverhead;
    ulong cNonTaggedColumns;
    ulong cTaggedColumns;
    ulong cLongValues;
    ulong cMultiValues;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; JET_RECSIZE サイズ: 64 バイト(x64)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; cbData : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; cbLongValueData : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; cbOverhead : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; cbLongValueOverhead : ULONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; cNonTaggedColumns : ULONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; cTaggedColumns : ULONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; cLongValues : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; cMultiValues : ULONGLONG (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global JET_RECSIZE, pack=4
    #field int64 cbData
    #field int64 cbLongValueData
    #field int64 cbOverhead
    #field int64 cbLongValueOverhead
    #field int64 cNonTaggedColumns
    #field int64 cTaggedColumns
    #field int64 cLongValues
    #field int64 cMultiValues
#endstruct

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