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

STAT_CHUNK

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

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

フィールド

フィールドサイズx64x86説明
idChunkDWORD4+0+0このチャンクの識別子。
breakTypeCHUNK_BREAKTYPE4+4+4チャンク間の区切り種類(文/段落等のCHUNK_BREAKTYPE)。
flagsCHUNKSTATE4+8+8チャンクの種別フラグ(テキスト/値のCHUNKSTATE)。
localeDWORD4+12+12チャンクのテキストに対応するロケールID。
attributeFULLPROPSPEC32/24+16+16チャンクに関連付けられたプロパティ指定(FULLPROPSPEC)。
idChunkSourceDWORD4+48+40派生元(ソース)チャンクの識別子。
cwcStartSourceDWORD4+52+44ソースチャンク内の開始位置(文字単位)。
cwcLenSourceDWORD4+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 Structure
import 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: uint32
struct 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