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

JET_INDEXCREATE2_W

構造体
サイズx64: 88 バイト / x86: 52 バイト

サイズ=各フィールドのバイト数(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で既定値。
pSpacehintsJET_SPACEHINTS*8/4+80+48インデックスの領域確保ヒントJET_SPACEHINTSへのポインタ。NULL可。

共用体: _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_INDEXCREATE2_W  (x64 88 / x86 52 バイト)
typedef struct JET_INDEXCREATE2_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_SPACEHINTS* pSpacehints;
} JET_INDEXCREATE2_W;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct JET_INDEXCREATE2_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;
    public IntPtr pSpacehints;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure JET_INDEXCREATE2_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
    Public pSpacehints As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class JET_INDEXCREATE2_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),
        ("pSpacehints", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct JET_INDEXCREATE2_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,
    pub pSpacehints: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type JET_INDEXCREATE2_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
	pSpacehints uintptr
}
type
  JET_INDEXCREATE2_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;
    pSpacehints: Pointer;
  end;
const JET_INDEXCREATE2_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,
    pSpacehints: ?*anyopaque,
};
type
  JET_INDEXCREATE2_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
    pSpacehints: pointer
struct JET_INDEXCREATE2_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;
    void* pSpacehints;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; JET_INDEXCREATE2_W サイズ: 52 バイト(x86)
dim st, 13    ; 4byte整数×13(構造体サイズ 52 / 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 も可)
; pSpacehints : JET_SPACEHINTS* (+48, 4byte)  varptr(st)+48 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; JET_INDEXCREATE2_W サイズ: 88 バイト(x64)
dim st, 22    ; 4byte整数×22(構造体サイズ 88 / 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 も可)
; pSpacehints : JET_SPACEHINTS* (+80, 8byte)  varptr(st)+80 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global JET_INDEXCREATE2_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
    #field intptr pSpacehints
#endstruct

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