ホーム › Media.Speech › SPWORDPRONUNCIATION
SPWORDPRONUNCIATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| pNextWordPronunciation | SPWORDPRONUNCIATION* | 8/4 | +0 | +0 | 次の発音エントリへのポインタ。末尾ならNULL。 |
| eLexiconType | SPLEXICONTYPE | 4 | +8 | +4 | この発音が属する辞書の種類(SPLEXICONTYPE)。 |
| LangID | WORD | 2 | +12 | +8 | 発音の言語ID(LANGID)。 |
| wPronunciationFlags | WORD | 2 | +14 | +10 | 発音に関するフラグ。 |
| ePartOfSpeech | SPPARTOFSPEECH | 4 | +16 | +12 | 品詞(SPPARTOFSPEECH)。 |
| szPronunciation | WORD | 2 | +20 | +16 | 発音記号(音素ID列)を格納する可変長配列の先頭。NULL終端。 |
各言語での定義
#include <windows.h>
// SPWORDPRONUNCIATION (x64 24 / x86 20 バイト)
typedef struct SPWORDPRONUNCIATION {
SPWORDPRONUNCIATION* pNextWordPronunciation;
SPLEXICONTYPE eLexiconType;
WORD LangID;
WORD wPronunciationFlags;
SPPARTOFSPEECH ePartOfSpeech;
WORD szPronunciation[1];
} SPWORDPRONUNCIATION;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SPWORDPRONUNCIATION
{
public IntPtr pNextWordPronunciation;
public int eLexiconType;
public ushort LangID;
public ushort wPronunciationFlags;
public int ePartOfSpeech;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public ushort[] szPronunciation;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SPWORDPRONUNCIATION
Public pNextWordPronunciation As IntPtr
Public eLexiconType As Integer
Public LangID As UShort
Public wPronunciationFlags As UShort
Public ePartOfSpeech As Integer
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public szPronunciation() As UShort
End Structureimport ctypes
from ctypes import wintypes
class SPWORDPRONUNCIATION(ctypes.Structure):
_fields_ = [
("pNextWordPronunciation", ctypes.c_void_p),
("eLexiconType", ctypes.c_int),
("LangID", ctypes.c_ushort),
("wPronunciationFlags", ctypes.c_ushort),
("ePartOfSpeech", ctypes.c_int),
("szPronunciation", ctypes.c_ushort * 1),
]#[repr(C)]
pub struct SPWORDPRONUNCIATION {
pub pNextWordPronunciation: *mut core::ffi::c_void,
pub eLexiconType: i32,
pub LangID: u16,
pub wPronunciationFlags: u16,
pub ePartOfSpeech: i32,
pub szPronunciation: [u16; 1],
}import "golang.org/x/sys/windows"
type SPWORDPRONUNCIATION struct {
pNextWordPronunciation uintptr
eLexiconType int32
LangID uint16
wPronunciationFlags uint16
ePartOfSpeech int32
szPronunciation [1]uint16
}type
SPWORDPRONUNCIATION = record
pNextWordPronunciation: Pointer;
eLexiconType: Integer;
LangID: Word;
wPronunciationFlags: Word;
ePartOfSpeech: Integer;
szPronunciation: array[0..0] of Word;
end;const SPWORDPRONUNCIATION = extern struct {
pNextWordPronunciation: ?*anyopaque,
eLexiconType: i32,
LangID: u16,
wPronunciationFlags: u16,
ePartOfSpeech: i32,
szPronunciation: [1]u16,
};type
SPWORDPRONUNCIATION {.bycopy.} = object
pNextWordPronunciation: pointer
eLexiconType: int32
LangID: uint16
wPronunciationFlags: uint16
ePartOfSpeech: int32
szPronunciation: array[1, uint16]struct SPWORDPRONUNCIATION
{
void* pNextWordPronunciation;
int eLexiconType;
ushort LangID;
ushort wPronunciationFlags;
int ePartOfSpeech;
ushort[1] szPronunciation;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SPWORDPRONUNCIATION サイズ: 20 バイト(x86)
dim st, 5 ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; pNextWordPronunciation : SPWORDPRONUNCIATION* (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; eLexiconType : SPLEXICONTYPE (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; LangID : WORD (+8, 2byte) wpoke st,8,値 / 値 = wpeek(st,8)
; wPronunciationFlags : WORD (+10, 2byte) wpoke st,10,値 / 値 = wpeek(st,10)
; ePartOfSpeech : SPPARTOFSPEECH (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; szPronunciation : WORD (+16, 2byte) varptr(st)+16 を基点に操作(2byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SPWORDPRONUNCIATION サイズ: 24 バイト(x64)
dim st, 6 ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; pNextWordPronunciation : SPWORDPRONUNCIATION* (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; eLexiconType : SPLEXICONTYPE (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; LangID : WORD (+12, 2byte) wpoke st,12,値 / 値 = wpeek(st,12)
; wPronunciationFlags : WORD (+14, 2byte) wpoke st,14,値 / 値 = wpeek(st,14)
; ePartOfSpeech : SPPARTOFSPEECH (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; szPronunciation : WORD (+20, 2byte) varptr(st)+20 を基点に操作(2byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SPWORDPRONUNCIATION
#field intptr pNextWordPronunciation
#field int eLexiconType
#field short LangID
#field short wPronunciationFlags
#field int ePartOfSpeech
#field short szPronunciation 1
#endstruct
stdim st, SPWORDPRONUNCIATION ; NSTRUCT 変数を確保
st->eLexiconType = 100
mes "eLexiconType=" + st->eLexiconType