ホーム › Storage.IndexServer › STAT_CHUNK
STAT_CHUNK
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| idChunk | DWORD | 4 | +0 | +0 | このチャンクの識別子。 |
| breakType | CHUNK_BREAKTYPE | 4 | +4 | +4 | チャンク間の区切り種類(文/段落等のCHUNK_BREAKTYPE)。 |
| flags | CHUNKSTATE | 4 | +8 | +8 | チャンクの種別フラグ(テキスト/値のCHUNKSTATE)。 |
| locale | DWORD | 4 | +12 | +12 | チャンクのテキストに対応するロケールID。 |
| attribute | FULLPROPSPEC | 32/24 | +16 | +16 | チャンクに関連付けられたプロパティ指定(FULLPROPSPEC)。 |
| idChunkSource | DWORD | 4 | +48 | +40 | 派生元(ソース)チャンクの識別子。 |
| cwcStartSource | DWORD | 4 | +52 | +44 | ソースチャンク内の開始位置(文字単位)。 |
| cwcLenSource | DWORD | 4 | +56 | +48 | ソース領域の長さ(文字数)。 |
各言語での定義
#include <windows.h>
// PROPSPEC (x64 16 / x86 8 バイト)
typedef struct PROPSPEC {
PROPSPEC_KIND ulKind;
_Anonymous_e__Union Anonymous;
} PROPSPEC;
// FULLPROPSPEC (x64 32 / x86 24 バイト)
typedef struct FULLPROPSPEC {
GUID guidPropSet;
PROPSPEC psProperty;
} FULLPROPSPEC;
// STAT_CHUNK (x64 64 / x86 52 バイト)
typedef struct STAT_CHUNK {
DWORD idChunk;
CHUNK_BREAKTYPE breakType;
CHUNKSTATE flags;
DWORD locale;
FULLPROPSPEC attribute;
DWORD idChunkSource;
DWORD cwcStartSource;
DWORD cwcLenSource;
} STAT_CHUNK;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PROPSPEC
{
public uint ulKind;
public _Anonymous_e__Union Anonymous;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FULLPROPSPEC
{
public Guid guidPropSet;
public PROPSPEC psProperty;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct STAT_CHUNK
{
public uint idChunk;
public int breakType;
public int flags;
public uint locale;
public FULLPROPSPEC attribute;
public uint idChunkSource;
public uint cwcStartSource;
public uint cwcLenSource;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PROPSPEC
Public ulKind As UInteger
Public Anonymous As _Anonymous_e__Union
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FULLPROPSPEC
Public guidPropSet As Guid
Public psProperty As PROPSPEC
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure STAT_CHUNK
Public idChunk As UInteger
Public breakType As Integer
Public flags As Integer
Public locale As UInteger
Public attribute As FULLPROPSPEC
Public idChunkSource As UInteger
Public cwcStartSource As UInteger
Public cwcLenSource As UInteger
End Structureimport ctypes
from ctypes import wintypes
class PROPSPEC(ctypes.Structure):
_fields_ = [
("ulKind", wintypes.DWORD),
("Anonymous", _Anonymous_e__Union),
]
class FULLPROPSPEC(ctypes.Structure):
_fields_ = [
("guidPropSet", GUID),
("psProperty", PROPSPEC),
]
class STAT_CHUNK(ctypes.Structure):
_fields_ = [
("idChunk", wintypes.DWORD),
("breakType", ctypes.c_int),
("flags", ctypes.c_int),
("locale", wintypes.DWORD),
("attribute", FULLPROPSPEC),
("idChunkSource", wintypes.DWORD),
("cwcStartSource", wintypes.DWORD),
("cwcLenSource", wintypes.DWORD),
]#[repr(C)]
pub struct PROPSPEC {
pub ulKind: u32,
pub Anonymous: _Anonymous_e__Union,
}
#[repr(C)]
pub struct FULLPROPSPEC {
pub guidPropSet: GUID,
pub psProperty: PROPSPEC,
}
#[repr(C)]
pub struct STAT_CHUNK {
pub idChunk: u32,
pub breakType: i32,
pub flags: i32,
pub locale: u32,
pub attribute: FULLPROPSPEC,
pub idChunkSource: u32,
pub cwcStartSource: u32,
pub cwcLenSource: u32,
}import "golang.org/x/sys/windows"
type PROPSPEC struct {
ulKind uint32
Anonymous _Anonymous_e__Union
}
type FULLPROPSPEC struct {
guidPropSet windows.GUID
psProperty PROPSPEC
}
type STAT_CHUNK struct {
idChunk uint32
breakType int32
flags int32
locale uint32
attribute FULLPROPSPEC
idChunkSource uint32
cwcStartSource uint32
cwcLenSource uint32
}type
PROPSPEC = record
ulKind: DWORD;
Anonymous: _Anonymous_e__Union;
end;
FULLPROPSPEC = record
guidPropSet: TGUID;
psProperty: PROPSPEC;
end;
STAT_CHUNK = record
idChunk: DWORD;
breakType: Integer;
flags: Integer;
locale: DWORD;
attribute: FULLPROPSPEC;
idChunkSource: DWORD;
cwcStartSource: DWORD;
cwcLenSource: DWORD;
end;const PROPSPEC = extern struct {
ulKind: u32,
Anonymous: _Anonymous_e__Union,
};
const FULLPROPSPEC = extern struct {
guidPropSet: GUID,
psProperty: PROPSPEC,
};
const STAT_CHUNK = extern struct {
idChunk: u32,
breakType: i32,
flags: i32,
locale: u32,
attribute: FULLPROPSPEC,
idChunkSource: u32,
cwcStartSource: u32,
cwcLenSource: u32,
};type
PROPSPEC {.bycopy.} = object
ulKind: uint32
Anonymous: _Anonymous_e__Union
FULLPROPSPEC {.bycopy.} = object
guidPropSet: GUID
psProperty: PROPSPEC
STAT_CHUNK {.bycopy.} = object
idChunk: uint32
breakType: int32
flags: int32
locale: uint32
attribute: FULLPROPSPEC
idChunkSource: uint32
cwcStartSource: uint32
cwcLenSource: uint32struct PROPSPEC
{
uint ulKind;
_Anonymous_e__Union Anonymous;
}
struct FULLPROPSPEC
{
GUID guidPropSet;
PROPSPEC psProperty;
}
struct STAT_CHUNK
{
uint idChunk;
int breakType;
int flags;
uint locale;
FULLPROPSPEC attribute;
uint idChunkSource;
uint cwcStartSource;
uint cwcLenSource;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; STAT_CHUNK サイズ: 52 バイト(x86)
dim st, 13 ; 4byte整数×13(構造体サイズ 52 / 4 切り上げ)
; idChunk : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; breakType : CHUNK_BREAKTYPE (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; flags : CHUNKSTATE (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; locale : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; attribute : FULLPROPSPEC (+16, 24byte) varptr(st)+16 を基点に操作(24byte:入れ子/配列)
; idChunkSource : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; cwcStartSource : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; cwcLenSource : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; STAT_CHUNK サイズ: 64 バイト(x64)
dim st, 16 ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; idChunk : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; breakType : CHUNK_BREAKTYPE (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; flags : CHUNKSTATE (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; locale : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; attribute : FULLPROPSPEC (+16, 32byte) varptr(st)+16 を基点に操作(32byte:入れ子/配列)
; idChunkSource : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; cwcStartSource : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; cwcLenSource : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global PROPSPEC
#field int ulKind
#field byte Anonymous 8
#endstruct
#defstruct global FULLPROPSPEC
#field GUID guidPropSet
#field PROPSPEC psProperty
#endstruct
#defstruct global STAT_CHUNK
#field int idChunk
#field int breakType
#field int flags
#field int locale
#field FULLPROPSPEC attribute
#field int idChunkSource
#field int cwcStartSource
#field int cwcLenSource
#endstruct
stdim st, STAT_CHUNK ; NSTRUCT 変数を確保
st->idChunk = 100
mes "idChunk=" + st->idChunk