ホーム › Media.Speech › SPPHRASERULE
SPPHRASERULE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| pszName | LPWSTR | 8/4 | +0 | +0 | このルール(文法規則)の名前(Unicode文字列)。 |
| ulId | DWORD | 4 | +8 | +4 | ルールの識別子。 |
| ulFirstElement | DWORD | 4 | +12 | +8 | このルールが対応する最初の要素のインデックス。 |
| ulCountOfElements | DWORD | 4 | +16 | +12 | このルールが含む要素の数。 |
| pNextSibling | SPPHRASERULE* | 8/4 | +24 | +16 | 同階層の次の兄弟ルールへのポインタ。無ければNULL。 |
| pFirstChild | SPPHRASERULE* | 8/4 | +32 | +20 | 最初の子ルールへのポインタ。無ければNULL。 |
| SREngineConfidence | FLOAT | 4 | +40 | +24 | 認識エンジンによる信頼度スコア(0.0~1.0)。 |
| Confidence | CHAR | 1 | +44 | +28 | ルール全体の信頼度レベル(SP_LOW/NORMAL/HIGH)。 |
各言語での定義
#include <windows.h>
// SPPHRASERULE (x64 48 / x86 32 バイト)
typedef struct SPPHRASERULE {
LPWSTR pszName;
DWORD ulId;
DWORD ulFirstElement;
DWORD ulCountOfElements;
SPPHRASERULE* pNextSibling;
SPPHRASERULE* pFirstChild;
FLOAT SREngineConfidence;
CHAR Confidence;
} SPPHRASERULE;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SPPHRASERULE
{
public IntPtr pszName;
public uint ulId;
public uint ulFirstElement;
public uint ulCountOfElements;
public IntPtr pNextSibling;
public IntPtr pFirstChild;
public float SREngineConfidence;
public sbyte Confidence;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SPPHRASERULE
Public pszName As IntPtr
Public ulId As UInteger
Public ulFirstElement As UInteger
Public ulCountOfElements As UInteger
Public pNextSibling As IntPtr
Public pFirstChild As IntPtr
Public SREngineConfidence As Single
Public Confidence As SByte
End Structureimport ctypes
from ctypes import wintypes
class SPPHRASERULE(ctypes.Structure):
_fields_ = [
("pszName", ctypes.c_void_p),
("ulId", wintypes.DWORD),
("ulFirstElement", wintypes.DWORD),
("ulCountOfElements", wintypes.DWORD),
("pNextSibling", ctypes.c_void_p),
("pFirstChild", ctypes.c_void_p),
("SREngineConfidence", ctypes.c_float),
("Confidence", ctypes.c_byte),
]#[repr(C)]
pub struct SPPHRASERULE {
pub pszName: *mut core::ffi::c_void,
pub ulId: u32,
pub ulFirstElement: u32,
pub ulCountOfElements: u32,
pub pNextSibling: *mut core::ffi::c_void,
pub pFirstChild: *mut core::ffi::c_void,
pub SREngineConfidence: f32,
pub Confidence: i8,
}import "golang.org/x/sys/windows"
type SPPHRASERULE struct {
pszName uintptr
ulId uint32
ulFirstElement uint32
ulCountOfElements uint32
pNextSibling uintptr
pFirstChild uintptr
SREngineConfidence float32
Confidence int8
}type
SPPHRASERULE = record
pszName: Pointer;
ulId: DWORD;
ulFirstElement: DWORD;
ulCountOfElements: DWORD;
pNextSibling: Pointer;
pFirstChild: Pointer;
SREngineConfidence: Single;
Confidence: Shortint;
end;const SPPHRASERULE = extern struct {
pszName: ?*anyopaque,
ulId: u32,
ulFirstElement: u32,
ulCountOfElements: u32,
pNextSibling: ?*anyopaque,
pFirstChild: ?*anyopaque,
SREngineConfidence: f32,
Confidence: i8,
};type
SPPHRASERULE {.bycopy.} = object
pszName: pointer
ulId: uint32
ulFirstElement: uint32
ulCountOfElements: uint32
pNextSibling: pointer
pFirstChild: pointer
SREngineConfidence: float32
Confidence: int8struct SPPHRASERULE
{
void* pszName;
uint ulId;
uint ulFirstElement;
uint ulCountOfElements;
void* pNextSibling;
void* pFirstChild;
float SREngineConfidence;
byte Confidence;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SPPHRASERULE サイズ: 32 バイト(x86)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; pszName : LPWSTR (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; ulId : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; ulFirstElement : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; ulCountOfElements : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; pNextSibling : SPPHRASERULE* (+16, 4byte) varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; pFirstChild : SPPHRASERULE* (+20, 4byte) varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; SREngineConfidence : FLOAT (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; Confidence : CHAR (+28, 1byte) poke st,28,値 / 値 = peek(st,28)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SPPHRASERULE サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; pszName : LPWSTR (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; ulId : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; ulFirstElement : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; ulCountOfElements : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pNextSibling : SPPHRASERULE* (+24, 8byte) varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; pFirstChild : SPPHRASERULE* (+32, 8byte) varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; SREngineConfidence : FLOAT (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; Confidence : CHAR (+44, 1byte) poke st,44,値 / 値 = peek(st,44)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SPPHRASERULE
#field intptr pszName
#field int ulId
#field int ulFirstElement
#field int ulCountOfElements
#field intptr pNextSibling
#field intptr pFirstChild
#field float SREngineConfidence
#field byte Confidence
#endstruct
stdim st, SPPHRASERULE ; NSTRUCT 変数を確保
st->ulId = 100
mes "ulId=" + st->ulId