ホーム › Globalization › UText
UText
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| magic | DWORD | 4 | +0 | +0 | 構造体の正当性を確認するマジック値。 |
| flags | INT | 4 | +4 | +4 | UTextの状態を示す内部フラグ。 |
| providerProperties | INT | 4 | +8 | +8 | テキストプロバイダの特性を示すビットフラグ。 |
| sizeOfStruct | INT | 4 | +12 | +12 | この構造体のバイトサイズ。 |
| chunkNativeLimit | LONGLONG | 8 | +16 | +16 | 現在チャンクが対応するネイティブ位置の上限。 |
| extraSize | INT | 4 | +24 | +24 | pExtraが指す追加領域のバイトサイズ。 |
| nativeIndexingLimit | INT | 4 | +28 | +28 | 1対1のネイティブ索引が成り立つチャンク内上限。 |
| chunkNativeStart | LONGLONG | 8 | +32 | +32 | 現在チャンクが対応するネイティブ位置の開始。 |
| chunkOffset | INT | 4 | +40 | +40 | 現在チャンク内の現在位置オフセット。 |
| chunkLength | INT | 4 | +44 | +44 | 現在チャンクのUTF-16単位での長さ。 |
| chunkContents | WORD* | 8/4 | +48 | +48 | 現在チャンクのUTF-16テキストへのポインタ。 |
| pFuncs | UTextFuncs* | 8/4 | +56 | +52 | プロバイダ関数テーブルUTextFuncsへのポインタ。 |
| pExtra | void* | 8/4 | +64 | +56 | プロバイダ用の追加領域へのポインタ。 |
| context | void* | 8/4 | +72 | +60 | テキストプロバイダのコンテキストへのポインタ。 |
| p | void* | 8/4 | +80 | +64 | プロバイダが自由に使う汎用ポインタp。 |
| q | void* | 8/4 | +88 | +68 | プロバイダが自由に使う汎用ポインタq。 |
| r | void* | 8/4 | +96 | +72 | プロバイダが自由に使う汎用ポインタr。 |
| privP | void* | 8/4 | +104 | +76 | ICU内部専用の汎用ポインタ。 |
| a | LONGLONG | 8 | +112 | +80 | プロバイダが自由に使う64ビット値a。 |
| b | INT | 4 | +120 | +88 | プロバイダが自由に使う32ビット値b。 |
| c | INT | 4 | +124 | +92 | プロバイダが自由に使う32ビット値c。 |
| privA | LONGLONG | 8 | +128 | +96 | ICU内部専用の64ビット値。 |
| privB | INT | 4 | +136 | +104 | ICU内部専用の32ビット値。 |
| privC | INT | 4 | +140 | +108 | ICU内部専用の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 Structureimport 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: int32struct 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