ホーム › UI.Input.Ime › MORRSLT
MORRSLT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwSize | DWORD | 4 | +0 | +0 | 本構造体と関連データを含む全体サイズである。 |
| pwchOutput | LPWSTR | 8/4 | +4 | +4 | 変換出力文字列へのポインタである。 |
| cchOutput | WORD | 2 | +12 | +8 | 出力文字列の文字数である。 |
| Anonymous1 | _Anonymous1_e__Union | 8/4 | +14 | +10 | 読み出力に関する無名共用体である。 |
| Anonymous2 | _Anonymous2_e__Union | 2 | +22 | +14 | 読み出力長に関する無名共用体である。 |
| pchInputPos | WORD* | 8/4 | +24 | +16 | 入力位置対応配列へのポインタである。 |
| pchOutputIdxWDD | WORD* | 8/4 | +32 | +20 | 出力文字とWDDの対応インデックス配列である。 |
| Anonymous3 | _Anonymous3_e__Union | 8/4 | +40 | +24 | モノルビ関連の無名共用体である。 |
| paMonoRubyPos | WORD* | 8/4 | +48 | +28 | モノルビの位置配列へのポインタである。 |
| pWDD | WDD* | 8/4 | +56 | +32 | 形態素情報WDD配列へのポインタである。 |
| cWDD | INT | 4 | +64 | +36 | WDD配列の要素数である。 |
| pPrivate | void* | 8/4 | +68 | +40 | IME独自データへのポインタである。 |
| BLKBuff | WCHAR | 2 | +76 | +44 | 可変長データを格納するバッファ先頭である。 |
共用体: _Anonymous1_e__Union x64 8B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| pwchRead | LPWSTR | 8/4 | +0 | +0 |
| pwchComp | LPWSTR | 8/4 | +0 | +0 |
共用体: _Anonymous2_e__Union x64 2B / x86 2B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| cchRead | WORD | 2 | +0 | +0 |
| cchComp | WORD | 2 | +0 | +0 |
共用体: _Anonymous3_e__Union x64 8B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| pchReadIdxWDD | WORD* | 8/4 | +0 | +0 |
| pchCompIdxWDD | WORD* | 8/4 | +0 | +0 |
各言語での定義
#include <windows.h>
// MORRSLT (x64 78 / x86 46 バイト)
#pragma pack(push, 1)
typedef struct MORRSLT {
DWORD dwSize;
LPWSTR pwchOutput;
WORD cchOutput;
_Anonymous1_e__Union Anonymous1;
_Anonymous2_e__Union Anonymous2;
WORD* pchInputPos;
WORD* pchOutputIdxWDD;
_Anonymous3_e__Union Anonymous3;
WORD* paMonoRubyPos;
WDD* pWDD;
INT cWDD;
void* pPrivate;
WCHAR BLKBuff[1];
} MORRSLT;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct MORRSLT
{
public uint dwSize;
public IntPtr pwchOutput;
public ushort cchOutput;
public _Anonymous1_e__Union Anonymous1;
public _Anonymous2_e__Union Anonymous2;
public IntPtr pchInputPos;
public IntPtr pchOutputIdxWDD;
public _Anonymous3_e__Union Anonymous3;
public IntPtr paMonoRubyPos;
public IntPtr pWDD;
public int cWDD;
public IntPtr pPrivate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1)] public string BLKBuff;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure MORRSLT
Public dwSize As UInteger
Public pwchOutput As IntPtr
Public cchOutput As UShort
Public Anonymous1 As _Anonymous1_e__Union
Public Anonymous2 As _Anonymous2_e__Union
Public pchInputPos As IntPtr
Public pchOutputIdxWDD As IntPtr
Public Anonymous3 As _Anonymous3_e__Union
Public paMonoRubyPos As IntPtr
Public pWDD As IntPtr
Public cWDD As Integer
Public pPrivate As IntPtr
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=1)> Public BLKBuff As String
End Structureimport ctypes
from ctypes import wintypes
class MORRSLT(ctypes.Structure):
_pack_ = 1
_fields_ = [
("dwSize", wintypes.DWORD),
("pwchOutput", ctypes.c_void_p),
("cchOutput", ctypes.c_ushort),
("Anonymous1", _Anonymous1_e__Union),
("Anonymous2", _Anonymous2_e__Union),
("pchInputPos", ctypes.c_void_p),
("pchOutputIdxWDD", ctypes.c_void_p),
("Anonymous3", _Anonymous3_e__Union),
("paMonoRubyPos", ctypes.c_void_p),
("pWDD", ctypes.c_void_p),
("cWDD", ctypes.c_int),
("pPrivate", ctypes.c_void_p),
("BLKBuff", ctypes.c_wchar * 1),
]#[repr(C, packed(1))]
pub struct MORRSLT {
pub dwSize: u32,
pub pwchOutput: *mut core::ffi::c_void,
pub cchOutput: u16,
pub Anonymous1: _Anonymous1_e__Union,
pub Anonymous2: _Anonymous2_e__Union,
pub pchInputPos: *mut core::ffi::c_void,
pub pchOutputIdxWDD: *mut core::ffi::c_void,
pub Anonymous3: _Anonymous3_e__Union,
pub paMonoRubyPos: *mut core::ffi::c_void,
pub pWDD: *mut core::ffi::c_void,
pub cWDD: i32,
pub pPrivate: *mut core::ffi::c_void,
pub BLKBuff: [u16; 1],
}import "golang.org/x/sys/windows"
type MORRSLT struct {
dwSize uint32
pwchOutput uintptr
cchOutput uint16
Anonymous1 _Anonymous1_e__Union
Anonymous2 _Anonymous2_e__Union
pchInputPos uintptr
pchOutputIdxWDD uintptr
Anonymous3 _Anonymous3_e__Union
paMonoRubyPos uintptr
pWDD uintptr
cWDD int32
pPrivate uintptr
BLKBuff [1]uint16
}type
MORRSLT = packed record
dwSize: DWORD;
pwchOutput: Pointer;
cchOutput: Word;
Anonymous1: _Anonymous1_e__Union;
Anonymous2: _Anonymous2_e__Union;
pchInputPos: Pointer;
pchOutputIdxWDD: Pointer;
Anonymous3: _Anonymous3_e__Union;
paMonoRubyPos: Pointer;
pWDD: Pointer;
cWDD: Integer;
pPrivate: Pointer;
BLKBuff: array[0..0] of WideChar;
end;const MORRSLT = extern struct {
dwSize: u32,
pwchOutput: ?*anyopaque,
cchOutput: u16,
Anonymous1: _Anonymous1_e__Union,
Anonymous2: _Anonymous2_e__Union,
pchInputPos: ?*anyopaque,
pchOutputIdxWDD: ?*anyopaque,
Anonymous3: _Anonymous3_e__Union,
paMonoRubyPos: ?*anyopaque,
pWDD: ?*anyopaque,
cWDD: i32,
pPrivate: ?*anyopaque,
BLKBuff: [1]u16,
};type
MORRSLT {.packed.} = object
dwSize: uint32
pwchOutput: pointer
cchOutput: uint16
Anonymous1: _Anonymous1_e__Union
Anonymous2: _Anonymous2_e__Union
pchInputPos: pointer
pchOutputIdxWDD: pointer
Anonymous3: _Anonymous3_e__Union
paMonoRubyPos: pointer
pWDD: pointer
cWDD: int32
pPrivate: pointer
BLKBuff: array[1, uint16]align(1)
struct MORRSLT
{
uint dwSize;
void* pwchOutput;
ushort cchOutput;
_Anonymous1_e__Union Anonymous1;
_Anonymous2_e__Union Anonymous2;
void* pchInputPos;
void* pchOutputIdxWDD;
_Anonymous3_e__Union Anonymous3;
void* paMonoRubyPos;
void* pWDD;
int cWDD;
void* pPrivate;
wchar[1] BLKBuff;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MORRSLT サイズ: 46 バイト(x86)
dim st, 12 ; 4byte整数×12(構造体サイズ 46 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pwchOutput : LPWSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; cchOutput : WORD (+8, 2byte) wpoke st,8,値 / 値 = wpeek(st,8)
; Anonymous1 : _Anonymous1_e__Union (+10, 4byte) varptr(st)+10 を基点に操作(4byte:入れ子/配列)
; Anonymous2 : _Anonymous2_e__Union (+14, 2byte) varptr(st)+14 を基点に操作(2byte:入れ子/配列)
; pchInputPos : WORD* (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pchOutputIdxWDD : WORD* (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; Anonymous3 : _Anonymous3_e__Union (+24, 4byte) varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; paMonoRubyPos : WORD* (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; pWDD : WDD* (+32, 4byte) varptr(st)+32 を基点に操作(4byte:入れ子/配列)
; cWDD : INT (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; pPrivate : void* (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; BLKBuff : WCHAR (+44, 2byte) varptr(st)+44 を基点に操作(2byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MORRSLT サイズ: 78 バイト(x64)
dim st, 20 ; 4byte整数×20(構造体サイズ 78 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pwchOutput : LPWSTR (+4, 8byte) qpoke st,4,値 / qpeek(st,4) ※IronHSPのみ。3.7/3.8は lpoke st,4,下位 : lpoke st,8,上位
; cchOutput : WORD (+12, 2byte) wpoke st,12,値 / 値 = wpeek(st,12)
; Anonymous1 : _Anonymous1_e__Union (+14, 8byte) varptr(st)+14 を基点に操作(8byte:入れ子/配列)
; Anonymous2 : _Anonymous2_e__Union (+22, 2byte) varptr(st)+22 を基点に操作(2byte:入れ子/配列)
; pchInputPos : WORD* (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pchOutputIdxWDD : WORD* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; Anonymous3 : _Anonymous3_e__Union (+40, 8byte) varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; paMonoRubyPos : WORD* (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; pWDD : WDD* (+56, 8byte) varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; cWDD : INT (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; pPrivate : void* (+68, 8byte) qpoke st,68,値 / qpeek(st,68) ※IronHSPのみ。3.7/3.8は lpoke st,68,下位 : lpoke st,72,上位
; BLKBuff : WCHAR (+76, 2byte) varptr(st)+76 を基点に操作(2byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MORRSLT, pack=1
#field int dwSize
#field intptr pwchOutput
#field short cchOutput
#field byte Anonymous1 8
#field byte Anonymous2 2
#field intptr pchInputPos
#field intptr pchOutputIdxWDD
#field byte Anonymous3 8
#field intptr paMonoRubyPos
#field intptr pWDD
#field int cWDD
#field intptr pPrivate
#field wchar BLKBuff 1
#endstruct
stdim st, MORRSLT ; NSTRUCT 変数を確保
st->dwSize = 100
mes "dwSize=" + st->dwSize
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。