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

JET_INDEXCREATE_W

構造体
サイズx64: 80 バイト / x86: 48 バイト

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

フィールド

フィールドサイズx64x86説明
cbStructDWORD4+0+0この構造体のバイトサイズ。
szIndexNameWORD*8/4+8+4作成するインデックスの名前(Unicode文字列)へのポインタ。
szKeyWORD*8/4+16+8インデックスキーを定義する列指定文字列(Unicode、ヌル区切り)へのポインタ。
cbKeyDWORD4+24+12szKeyのバイト長(末尾のダブルヌルを含む)。
grbitDWORD4+28+16インデックスの属性を示すフラグ群(主キー、一意等)。
ulDensityDWORD4+32+20インデックスページの初期充填率(パーセント)。
Anonymous1_Anonymous1_e__Union8/4+40+24Unicode照合情報または言語IDを保持する無名共用体。
Anonymous2_Anonymous2_e__Union8/4+48+28可変セグメント長などの追加設定を保持する無名共用体。
rgconditionalcolumnJET_CONDITIONALCOLUMN_W*8/4+56+32条件付き列の配列JET_CONDITIONALCOLUMN_Wへのポインタ。NULL可。
cConditionalColumnDWORD4+64+36rgconditionalcolumn配列の要素数。
errINT4+68+40このインデックスの作成結果を示すJETエラーコード(出力)。
cbKeyMostDWORD4+72+44インデックスキーの最大バイト長。0で既定値。

共用体: _Anonymous1_e__Union x64 8B / x86 4B

フィールドサイズx64x86
lcidDWORD4+0+0
pidxunicodeJET_UNICODEINDEX*8/4+0+0

共用体: _Anonymous2_e__Union x64 8B / x86 4B

フィールドサイズx64x86
cbVarSegMacDWORD4+0+0
ptuplelimitsJET_TUPLELIMITS*8/4+0+0

各言語での定義

#include <windows.h>

// JET_INDEXCREATE_W  (x64 80 / x86 48 バイト)
typedef struct JET_INDEXCREATE_W {
    DWORD cbStruct;
    WORD* szIndexName;
    WORD* szKey;
    DWORD cbKey;
    DWORD grbit;
    DWORD ulDensity;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    JET_CONDITIONALCOLUMN_W* rgconditionalcolumn;
    DWORD cConditionalColumn;
    INT err;
    DWORD cbKeyMost;
} JET_INDEXCREATE_W;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct JET_INDEXCREATE_W
{
    public uint cbStruct;
    public IntPtr szIndexName;
    public IntPtr szKey;
    public uint cbKey;
    public uint grbit;
    public uint ulDensity;
    public _Anonymous1_e__Union Anonymous1;
    public _Anonymous2_e__Union Anonymous2;
    public IntPtr rgconditionalcolumn;
    public uint cConditionalColumn;
    public int err;
    public uint cbKeyMost;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure JET_INDEXCREATE_W
    Public cbStruct As UInteger
    Public szIndexName As IntPtr
    Public szKey As IntPtr
    Public cbKey As UInteger
    Public grbit As UInteger
    Public ulDensity As UInteger
    Public Anonymous1 As _Anonymous1_e__Union
    Public Anonymous2 As _Anonymous2_e__Union
    Public rgconditionalcolumn As IntPtr
    Public cConditionalColumn As UInteger
    Public err As Integer
    Public cbKeyMost As UInteger
End Structure
import ctypes
from ctypes import wintypes

class JET_INDEXCREATE_W(ctypes.Structure):
    _fields_ = [
        ("cbStruct", wintypes.DWORD),
        ("szIndexName", ctypes.c_void_p),
        ("szKey", ctypes.c_void_p),
        ("cbKey", wintypes.DWORD),
        ("grbit", wintypes.DWORD),
        ("ulDensity", wintypes.DWORD),
        ("Anonymous1", _Anonymous1_e__Union),
        ("Anonymous2", _Anonymous2_e__Union),
        ("rgconditionalcolumn", ctypes.c_void_p),
        ("cConditionalColumn", wintypes.DWORD),
        ("err", ctypes.c_int),
        ("cbKeyMost", wintypes.DWORD),
    ]
#[repr(C)]
pub struct JET_INDEXCREATE_W {
    pub cbStruct: u32,
    pub szIndexName: *mut core::ffi::c_void,
    pub szKey: *mut core::ffi::c_void,
    pub cbKey: u32,
    pub grbit: u32,
    pub ulDensity: u32,
    pub Anonymous1: _Anonymous1_e__Union,
    pub Anonymous2: _Anonymous2_e__Union,
    pub rgconditionalcolumn: *mut core::ffi::c_void,
    pub cConditionalColumn: u32,
    pub err: i32,
    pub cbKeyMost: u32,
}
import "golang.org/x/sys/windows"

type JET_INDEXCREATE_W struct {
	cbStruct uint32
	szIndexName uintptr
	szKey uintptr
	cbKey uint32
	grbit uint32
	ulDensity uint32
	Anonymous1 _Anonymous1_e__Union
	Anonymous2 _Anonymous2_e__Union
	rgconditionalcolumn uintptr
	cConditionalColumn uint32
	err int32
	cbKeyMost uint32
}
type
  JET_INDEXCREATE_W = record
    cbStruct: DWORD;
    szIndexName: Pointer;
    szKey: Pointer;
    cbKey: DWORD;
    grbit: DWORD;
    ulDensity: DWORD;
    Anonymous1: _Anonymous1_e__Union;
    Anonymous2: _Anonymous2_e__Union;
    rgconditionalcolumn: Pointer;
    cConditionalColumn: DWORD;
    err: Integer;
    cbKeyMost: DWORD;
  end;
const JET_INDEXCREATE_W = extern struct {
    cbStruct: u32,
    szIndexName: ?*anyopaque,
    szKey: ?*anyopaque,
    cbKey: u32,
    grbit: u32,
    ulDensity: u32,
    Anonymous1: _Anonymous1_e__Union,
    Anonymous2: _Anonymous2_e__Union,
    rgconditionalcolumn: ?*anyopaque,
    cConditionalColumn: u32,
    err: i32,
    cbKeyMost: u32,
};
type
  JET_INDEXCREATE_W {.bycopy.} = object
    cbStruct: uint32
    szIndexName: pointer
    szKey: pointer
    cbKey: uint32
    grbit: uint32
    ulDensity: uint32
    Anonymous1: _Anonymous1_e__Union
    Anonymous2: _Anonymous2_e__Union
    rgconditionalcolumn: pointer
    cConditionalColumn: uint32
    err: int32
    cbKeyMost: uint32
struct JET_INDEXCREATE_W
{
    uint cbStruct;
    void* szIndexName;
    void* szKey;
    uint cbKey;
    uint grbit;
    uint ulDensity;
    _Anonymous1_e__Union Anonymous1;
    _Anonymous2_e__Union Anonymous2;
    void* rgconditionalcolumn;
    uint cConditionalColumn;
    int err;
    uint cbKeyMost;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; JET_INDEXCREATE_W サイズ: 48 バイト(x86)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; szIndexName : WORD* (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; szKey : WORD* (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; cbKey : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; grbit : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ulDensity : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+24, 4byte)  varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; Anonymous2 : _Anonymous2_e__Union (+28, 4byte)  varptr(st)+28 を基点に操作(4byte:入れ子/配列)
; rgconditionalcolumn : JET_CONDITIONALCOLUMN_W* (+32, 4byte)  varptr(st)+32 を基点に操作(4byte:入れ子/配列)
; cConditionalColumn : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; err : INT (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; cbKeyMost : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; JET_INDEXCREATE_W サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; szIndexName : WORD* (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; szKey : WORD* (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; cbKey : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; grbit : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ulDensity : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+40, 8byte)  varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; Anonymous2 : _Anonymous2_e__Union (+48, 8byte)  varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; rgconditionalcolumn : JET_CONDITIONALCOLUMN_W* (+56, 8byte)  varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; cConditionalColumn : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; err : INT (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; cbKeyMost : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global JET_INDEXCREATE_W
    #field int cbStruct
    #field intptr szIndexName
    #field intptr szKey
    #field int cbKey
    #field int grbit
    #field int ulDensity
    #field byte Anonymous1 8
    #field byte Anonymous2 8
    #field intptr rgconditionalcolumn
    #field int cConditionalColumn
    #field int err
    #field int cbKeyMost
#endstruct

stdim st, JET_INDEXCREATE_W        ; NSTRUCT 変数を確保
st->cbStruct = 100
mes "cbStruct=" + st->cbStruct
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。