Win32 API 日本語リファレンス
ホームGlobalization › UText

UText

構造体
サイズx64: 144 バイト / x86: 112 バイト

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

フィールド

フィールドサイズx64x86説明
magicDWORD4+0+0構造体の正当性を確認するマジック値。
flagsINT4+4+4UTextの状態を示す内部フラグ。
providerPropertiesINT4+8+8テキストプロバイダの特性を示すビットフラグ。
sizeOfStructINT4+12+12この構造体のバイトサイズ。
chunkNativeLimitLONGLONG8+16+16現在チャンクが対応するネイティブ位置の上限。
extraSizeINT4+24+24pExtraが指す追加領域のバイトサイズ。
nativeIndexingLimitINT4+28+281対1のネイティブ索引が成り立つチャンク内上限。
chunkNativeStartLONGLONG8+32+32現在チャンクが対応するネイティブ位置の開始。
chunkOffsetINT4+40+40現在チャンク内の現在位置オフセット。
chunkLengthINT4+44+44現在チャンクのUTF-16単位での長さ。
chunkContentsWORD*8/4+48+48現在チャンクのUTF-16テキストへのポインタ。
pFuncsUTextFuncs*8/4+56+52プロバイダ関数テーブルUTextFuncsへのポインタ。
pExtravoid*8/4+64+56プロバイダ用の追加領域へのポインタ。
contextvoid*8/4+72+60テキストプロバイダのコンテキストへのポインタ。
pvoid*8/4+80+64プロバイダが自由に使う汎用ポインタp。
qvoid*8/4+88+68プロバイダが自由に使う汎用ポインタq。
rvoid*8/4+96+72プロバイダが自由に使う汎用ポインタr。
privPvoid*8/4+104+76ICU内部専用の汎用ポインタ。
aLONGLONG8+112+80プロバイダが自由に使う64ビット値a。
bINT4+120+88プロバイダが自由に使う32ビット値b。
cINT4+124+92プロバイダが自由に使う32ビット値c。
privALONGLONG8+128+96ICU内部専用の64ビット値。
privBINT4+136+104ICU内部専用の32ビット値。
privCINT4+140+108ICU内部専用の32ビット値。

各言語での定義

#include <windows.h>

// UText  (x64 144 / x86 112 バイト)
typedef struct UText {
    DWORD magic;
    INT flags;
    INT providerProperties;
    INT sizeOfStruct;
    LONGLONG chunkNativeLimit;
    INT extraSize;
    INT nativeIndexingLimit;
    LONGLONG chunkNativeStart;
    INT chunkOffset;
    INT chunkLength;
    WORD* chunkContents;
    UTextFuncs* pFuncs;
    void* pExtra;
    void* context;
    void* p;
    void* q;
    void* r;
    void* privP;
    LONGLONG a;
    INT b;
    INT c;
    LONGLONG privA;
    INT privB;
    INT privC;
} UText;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UText
{
    public uint magic;
    public int flags;
    public int providerProperties;
    public int sizeOfStruct;
    public long chunkNativeLimit;
    public int extraSize;
    public int nativeIndexingLimit;
    public long chunkNativeStart;
    public int chunkOffset;
    public int chunkLength;
    public IntPtr chunkContents;
    public IntPtr pFuncs;
    public IntPtr pExtra;
    public IntPtr context;
    public IntPtr p;
    public IntPtr q;
    public IntPtr r;
    public IntPtr privP;
    public long a;
    public int b;
    public int c;
    public long privA;
    public int privB;
    public int privC;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure UText
    Public magic As UInteger
    Public flags As Integer
    Public providerProperties As Integer
    Public sizeOfStruct As Integer
    Public chunkNativeLimit As Long
    Public extraSize As Integer
    Public nativeIndexingLimit As Integer
    Public chunkNativeStart As Long
    Public chunkOffset As Integer
    Public chunkLength As Integer
    Public chunkContents As IntPtr
    Public pFuncs As IntPtr
    Public pExtra As IntPtr
    Public context As IntPtr
    Public p As IntPtr
    Public q As IntPtr
    Public r As IntPtr
    Public privP As IntPtr
    Public a As Long
    Public b As Integer
    Public c As Integer
    Public privA As Long
    Public privB As Integer
    Public privC As Integer
End Structure
import ctypes
from ctypes import wintypes

class UText(ctypes.Structure):
    _fields_ = [
        ("magic", wintypes.DWORD),
        ("flags", ctypes.c_int),
        ("providerProperties", ctypes.c_int),
        ("sizeOfStruct", ctypes.c_int),
        ("chunkNativeLimit", ctypes.c_longlong),
        ("extraSize", ctypes.c_int),
        ("nativeIndexingLimit", ctypes.c_int),
        ("chunkNativeStart", ctypes.c_longlong),
        ("chunkOffset", ctypes.c_int),
        ("chunkLength", ctypes.c_int),
        ("chunkContents", ctypes.c_void_p),
        ("pFuncs", ctypes.c_void_p),
        ("pExtra", ctypes.c_void_p),
        ("context", ctypes.c_void_p),
        ("p", ctypes.c_void_p),
        ("q", ctypes.c_void_p),
        ("r", ctypes.c_void_p),
        ("privP", ctypes.c_void_p),
        ("a", ctypes.c_longlong),
        ("b", ctypes.c_int),
        ("c", ctypes.c_int),
        ("privA", ctypes.c_longlong),
        ("privB", ctypes.c_int),
        ("privC", ctypes.c_int),
    ]
#[repr(C)]
pub struct UText {
    pub magic: u32,
    pub flags: i32,
    pub providerProperties: i32,
    pub sizeOfStruct: i32,
    pub chunkNativeLimit: i64,
    pub extraSize: i32,
    pub nativeIndexingLimit: i32,
    pub chunkNativeStart: i64,
    pub chunkOffset: i32,
    pub chunkLength: i32,
    pub chunkContents: *mut core::ffi::c_void,
    pub pFuncs: *mut core::ffi::c_void,
    pub pExtra: *mut core::ffi::c_void,
    pub context: *mut core::ffi::c_void,
    pub p: *mut core::ffi::c_void,
    pub q: *mut core::ffi::c_void,
    pub r: *mut core::ffi::c_void,
    pub privP: *mut core::ffi::c_void,
    pub a: i64,
    pub b: i32,
    pub c: i32,
    pub privA: i64,
    pub privB: i32,
    pub privC: i32,
}
import "golang.org/x/sys/windows"

type UText struct {
	magic uint32
	flags int32
	providerProperties int32
	sizeOfStruct int32
	chunkNativeLimit int64
	extraSize int32
	nativeIndexingLimit int32
	chunkNativeStart int64
	chunkOffset int32
	chunkLength int32
	chunkContents uintptr
	pFuncs uintptr
	pExtra uintptr
	context uintptr
	p uintptr
	q uintptr
	r uintptr
	privP uintptr
	a int64
	b int32
	c int32
	privA int64
	privB int32
	privC int32
}
type
  UText = record
    magic: DWORD;
    flags: Integer;
    providerProperties: Integer;
    sizeOfStruct: Integer;
    chunkNativeLimit: Int64;
    extraSize: Integer;
    nativeIndexingLimit: Integer;
    chunkNativeStart: Int64;
    chunkOffset: Integer;
    chunkLength: Integer;
    chunkContents: Pointer;
    pFuncs: Pointer;
    pExtra: Pointer;
    context: Pointer;
    p: Pointer;
    q: Pointer;
    r: Pointer;
    privP: Pointer;
    a: Int64;
    b: Integer;
    c: Integer;
    privA: Int64;
    privB: Integer;
    privC: Integer;
  end;
const UText = extern struct {
    magic: u32,
    flags: i32,
    providerProperties: i32,
    sizeOfStruct: i32,
    chunkNativeLimit: i64,
    extraSize: i32,
    nativeIndexingLimit: i32,
    chunkNativeStart: i64,
    chunkOffset: i32,
    chunkLength: i32,
    chunkContents: ?*anyopaque,
    pFuncs: ?*anyopaque,
    pExtra: ?*anyopaque,
    context: ?*anyopaque,
    p: ?*anyopaque,
    q: ?*anyopaque,
    r: ?*anyopaque,
    privP: ?*anyopaque,
    a: i64,
    b: i32,
    c: i32,
    privA: i64,
    privB: i32,
    privC: i32,
};
type
  UText {.bycopy.} = object
    magic: uint32
    flags: int32
    providerProperties: int32
    sizeOfStruct: int32
    chunkNativeLimit: int64
    extraSize: int32
    nativeIndexingLimit: int32
    chunkNativeStart: int64
    chunkOffset: int32
    chunkLength: int32
    chunkContents: pointer
    pFuncs: pointer
    pExtra: pointer
    context: pointer
    p: pointer
    q: pointer
    r: pointer
    privP: pointer
    a: int64
    b: int32
    c: int32
    privA: int64
    privB: int32
    privC: int32
struct UText
{
    uint magic;
    int flags;
    int providerProperties;
    int sizeOfStruct;
    long chunkNativeLimit;
    int extraSize;
    int nativeIndexingLimit;
    long chunkNativeStart;
    int chunkOffset;
    int chunkLength;
    void* chunkContents;
    void* pFuncs;
    void* pExtra;
    void* context;
    void* p;
    void* q;
    void* r;
    void* privP;
    long a;
    int b;
    int c;
    long privA;
    int privB;
    int privC;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; UText サイズ: 112 バイト(x86)
dim st, 28    ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; magic : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; flags : INT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; providerProperties : INT (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; sizeOfStruct : INT (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; chunkNativeLimit : LONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; extraSize : INT (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; nativeIndexingLimit : INT (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; chunkNativeStart : LONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; chunkOffset : INT (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; chunkLength : INT (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; chunkContents : WORD* (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; pFuncs : UTextFuncs* (+52, 4byte)  varptr(st)+52 を基点に操作(4byte:入れ子/配列)
; pExtra : void* (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; context : void* (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; p : void* (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; q : void* (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; r : void* (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; privP : void* (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; a : LONGLONG (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; b : INT (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; c : INT (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; privA : LONGLONG (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; privB : INT (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; privC : INT (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; UText サイズ: 144 バイト(x64)
dim st, 36    ; 4byte整数×36(構造体サイズ 144 / 4 切り上げ)
; magic : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; flags : INT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; providerProperties : INT (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; sizeOfStruct : INT (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; chunkNativeLimit : LONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; extraSize : INT (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; nativeIndexingLimit : INT (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; chunkNativeStart : LONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; chunkOffset : INT (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; chunkLength : INT (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; chunkContents : WORD* (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; pFuncs : UTextFuncs* (+56, 8byte)  varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; pExtra : void* (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; context : void* (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; p : void* (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; q : void* (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; r : void* (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; privP : void* (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; a : LONGLONG (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; b : INT (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; c : INT (+124, 4byte)  st.31 = 値  /  値 = st.31   (lpoke/lpeek も可)
; privA : LONGLONG (+128, 8byte)  qpoke st,128,値 / qpeek(st,128)  ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; privB : INT (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; privC : INT (+140, 4byte)  st.35 = 値  /  値 = st.35   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global UText
    #field int magic
    #field int flags
    #field int providerProperties
    #field int sizeOfStruct
    #field int64 chunkNativeLimit
    #field int extraSize
    #field int nativeIndexingLimit
    #field int64 chunkNativeStart
    #field int chunkOffset
    #field int chunkLength
    #field intptr chunkContents
    #field intptr pFuncs
    #field intptr pExtra
    #field intptr context
    #field intptr p
    #field intptr q
    #field intptr r
    #field intptr privP
    #field int64 a
    #field int b
    #field int c
    #field int64 privA
    #field int privB
    #field int privC
#endstruct

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