// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0 > or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT >, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
use ctypes::{c_char, c_float, c_long, c_void};
use shared::guiddef::{CLSID, GUID, IID, REFGUID};
use shared::minwindef::{BOOL, BYTE, DWORD, ULONG, USHORT, WORD};
use shared::mmreg::WAVEFORMATEX;
use shared::windef::HWND;
use um::oaidl::VARIANT;
use um::objidlbase::IStream;
use um::sapi::*;
use um::unknwnbase::{IUnknown, IUnknownVtbl};
use um::winnt::{HANDLE, HRESULT, LONG, LPCWSTR, LPWSTR, PVOID, ULONGLONG, WCHAR};
pub const SPRECOEXTENSION: &
'static str = "RecoExtension";
pub const SPALTERNATESCLSID: &
'static str = "AlternatesCLSID";
RIDL!{
#[ uuid(
0 xf8e690f0,
0 x39cb,
0 x4843,
0 xb8,
0 xd7,
0 xc8,
0 x46,
0 x96,
0 xe1,
0 x11,
0 x9d)]
interface ISpTokenUI(ISpTokenUIVtbl): IUnknown(IUnknownVtbl) {
fn IsUISupported(
pszTypeOfUI: LPCWSTR,
pvExtraData: *
mut c_void,
cbExtraData: ULONG,
punkObject: *
mut IUnknown,
pfSupported: *
mut BOOL,
) -> HRESULT,
fn DisplayUI(
hwndParent: HWND,
pszTitle: LPCWSTR,
pszTypeOfUI: LPCWSTR,
pvExtraData: *
mut c_void,
cbExtraData: ULONG,
pToken: *
mut ISpObjectToken,
punkObject: *
mut IUnknown,
) -> HRESULT,
}}
RIDL!{
#[ uuid(
0 x06b64f9f,
0 x7fda,
0 x11d2,
0 xb4,
0 xf2,
0 x00,
0 xc0,
0 x4f,
0 x79,
0 x73,
0 x96)]
interface ISpObjectTokenEnumBuilder(ISpObjectTokenEnumBuilderVtbl):
IEnumSpObjectTokens(IEnumSpObjectTokensVtbl) {
fn SetAttribs(
pszReqAttribs: LPCWSTR,
pszOptAttribs: LPCWSTR,
) -> HRESULT,
fn AddTokens(
cTokens: ULONG,
pToken: *
mut *
mut ISpObjectToken,
) -> HRESULT,
fn AddTokensFromDataKey(
pDataKey: *
mut ISpDataKey,
pszSubKey: LPCWSTR,
pszCategoryId: LPCWSTR,
) -> HRESULT,
fn AddTokensFromTokenEnum(
pTokenEnum: *
mut IEnumSpObjectTokens,
) -> HRESULT,
fn Sort(
pszTokenIdToListFirst: LPCWSTR,
) -> HRESULT,
}}
DECLARE_HANDLE!{SPWORDHANDLE, SPWORDHANDLE__}
DECLARE_HANDLE!{SPRULEHANDLE, SPRULEHANDLE__}
DECLARE_HANDLE!{SPGRAMMARHANDLE, SPGRAMMARHANDLE__}
DECLARE_HANDLE!{SPRECOCONTEXTHANDLE, SPRECOCONTEXTHANDLE__}
DECLARE_HANDLE!{SPPHRASERULEHANDLE, SPPHRASERULEHANDLE__}
DECLARE_HANDLE!{SPPHRASEPROPERTYHANDLE, SPPHRASEPROPERTYHANDLE__}
DECLARE_HANDLE!{SPTRANSITIONID, SPTRANSITIONID__}
RIDL!{
#[ uuid(
0 xf4711347,
0 xe608,
0 x11d2,
0 xa0,
0 x86,
0 x00,
0 xc0,
0 x4f,
0 x8e,
0 xf9,
0 xb5)]
interface ISpErrorLog(ISpErrorLogVtbl): IUnknown(IUnknownVtbl) {
fn AddError(
lLineNumber: c_long,
hr: HRESULT,
pszDescription: LPCWSTR,
pszHelpFile: LPCWSTR,
dwHelpContext: DWORD,
) -> HRESULT,
}}
RIDL!{
#[ uuid(
0 xb1e29d58,
0 xa675,
0 x11d2,
0 x83,
0 x02,
0 x00,
0 xc0,
0 x4f,
0 x8e,
0 xe6,
0 xc0)]
interface ISpGrammarCompiler(ISpGrammarCompilerVtbl): IUnknown(IUnknownVtbl) {
fn CompileStream(
pSource: *
mut IStream,
pDest: *
mut IStream,
pHeader: *
mut IStream,
pReserved: *
mut IUnknown,
pErrorLog: *
mut ISpErrorLog,
dwFlags: DWORD,
) -> HRESULT,
}}
RIDL!{
#[ uuid(
0 x3ddca27c,
0 x665c,
0 x4786,
0 x9f,
0 x97,
0 x8c,
0 x90,
0 xc3,
0 x48,
0 x8b,
0 x61)]
interface ISpGramCompBackend(ISpGramCompBackendVtbl): ISpGrammarBuilder(ISpGrammar
BuilderVtbl) {
fn SetSaveObjects(
pStream: *mut IStream,
pErrorLog: *mut ISpErrorLog,
) -> HRESULT,
fn InitFromBinaryGrammar(
pBinaryData: *const SPBINARYGRAMMAR,
) -> HRESULT,
}}
RIDL!{#[ uuid(0 x12d7360f, 0 xa1c9, 0 x11d3, 0 xbc, 0 x90, 0 x00, 0 xc0, 0 x4f, 0 x72, 0 xdf, 0 x9f)]
interface ISpITNProcessor(ISpITNProcessorVtbl): IUnknown(IUnknownVtbl) {
fn LoadITNGrammar(
pszCLSID: LPWSTR,
) -> HRESULT,
fn ITNPhrase(
pPhrase: *mut ISpPhraseBuilder,
) -> HRESULT,
}}
RIDL!{#[ uuid(0 x88a3342a, 0 x0bed, 0 x4834, 0 x92, 0 x2b, 0 x88, 0 xd4, 0 x31, 0 x73, 0 x16, 0 x2f)]
interface ISpPhraseBuilder(ISpPhraseBuilderVtbl): ISpPhrase(ISpPhraseVtbl) {
fn InitFromPhrase(
pPhrase: *const SPPHRASE,
) -> HRESULT,
fn InitFromSerializedPhrase(
pPhrase: *const SPSERIALIZEDPHRASE,
) -> HRESULT,
fn AddElements(
cElements: ULONG,
pElement: *const SPPHRASEELEMENT,
) -> HRESULT,
fn AddRules(
hParent: SPPHRASERULEHANDLE,
pRule: *const SPPHRASERULE,
phNewRule: *mut SPPHRASERULEHANDLE,
) -> HRESULT,
fn AddProperties(
hParent: SPPHRASEPROPERTYHANDLE,
pProperty: *const SPPHRASEPROPERTY,
phNewProperty: *mut SPPHRASEPROPERTYHANDLE,
) -> HRESULT,
fn AddReplacements(
cReplacements: ULONG,
pReplacements: *const SPPHRASEREPLACEMENT,
) -> HRESULT,
}}
pub type ISpTask = *mut c_void;
pub type ISpThreadTask = *mut c_void;
RIDL!{#[ uuid(0 xa6be4d73, 0 x4403, 0 x4358, 0 xb2, 0 x2d, 0 x03, 0 x46, 0 xe2, 0 x3b, 0 x17, 0 x64)]
interface ISpThreadControl(ISpThreadControlVtbl): ISpNotifySink(ISpNotifySinkVtbl) {
fn StartThread(
dwFlags: DWORD,
phwnd: *mut HWND,
) -> HRESULT,
fn WaitForThreadDone(
fForceStop: BOOL,
phrThreadResult: *mut HRESULT,
msTimeOut: ULONG,
) -> HRESULT,
fn TerminateThread() -> HRESULT,
fn ThreadHandle() -> HANDLE,
fn ThreadId() -> DWORD,
fn NotifyEvent() -> HANDLE,
fn WindowHandle() -> HWND,
fn ThreadCompleteEvent() -> HANDLE,
fn ExitThreadEvent() -> HANDLE,
}}
STRUCT !{struct SPTMTHREADINFO {
lPoolSize: c_long,
lPriority: c_long,
ulConcurrencyLimit: ULONG,
ulMaxQuickAllocThreads: ULONG,
}}
RIDL!{#[ uuid(0 x2baeef81, 0 x2ca3, 0 x4331, 0 x98, 0 xf3, 0 x26, 0 xec, 0 x5a, 0 xbe, 0 xfb, 0 x03)]
interface ISpTaskManager(ISpTaskManagerVtbl): IUnknown(IUnknownVtbl) {
fn SetThreadPoolInfo(
pPoolInfo: *const SPTMTHREADINFO,
) -> HRESULT,
fn GetThreadPoolInfo(
pPoolInfo: *mut SPTMTHREADINFO,
) -> HRESULT,
fn QueueTask(
pTask: *mut ISpTask,
pvTaskData: *mut c_void,
hCompEvent: HANDLE,
pdwGroupId: *mut DWORD,
pTaskID: *mut DWORD,
) -> HRESULT,
fn CreateReoccurringTask(
pTask: *mut ISpTask,
pvTaskData: *mut c_void,
hCompEvent: HANDLE,
ppTaskCtrl: *mut *mut ISpNotifySink,
) -> HRESULT,
fn CreateThreadControl(
pTask: *mut ISpThreadTask,
pvTaskData: *mut c_void,
nPriority: c_long,
ppTaskCtrl: *mut *mut ISpThreadControl,
) -> HRESULT,
fn TerminateTask(
dwGroupId: DWORD,
ulWaitPeriod: ULONG,
) -> HRESULT,
}}
ENUM !{enum SPVSKIPTYPE {
SPVST_SENTENCE = 1 << 0 ,
}}
ENUM !{enum SPVESACTIONS {
SPVES_CONTINUE = 0 ,
SPVES_ABORT = 1 << 0 ,
SPVES_SKIP = 1 << 1 ,
SPVES_RATE = 1 << 2 ,
SPVES_VOLUME = 1 << 3 ,
}}
RIDL!{#[ uuid(0 x9880499b, 0 xcce9, 0 x11d2, 0 xb5, 0 x03, 0 x00, 0 xc0, 0 x4f, 0 x79, 0 x73, 0 x96)]
interface ISpTTSEngineSite(ISpTTSEngineSiteVtbl): ISpEventSink(ISpEventSinkVtbl) {
fn GetActions() -> DWORD,
fn Write(
pBuff: *const c_void,
cb: ULONG,
pcbWritten: *mut ULONG,
) -> HRESULT,
fn GetRate(
pRateAdjust: *mut c_long,
) -> HRESULT,
fn GetVolume(pusVolume: *mut USHORT,
) -> HRESULT,
fn GetSkipInfo(
peType: *mut SPVSKIPTYPE,
plNumItems: *mut c_long,
) -> HRESULT,
fn CompleteSkip(
ulNumSkipped: c_long,
) -> HRESULT,
}}
STRUCT !{struct SPVTEXTFRAG {
pNext: *mut SPVTEXTFRAG,
State: SPVSTATE,
pTextStart: LPCWSTR,
ulTextLen: ULONG,
ulTextSrcOffset: ULONG,
}}
RIDL!{#[ uuid(0 xa74d7c8e, 0 x4cc5, 0 x4f2f, 0 xa6, 0 xeb, 0 x80, 0 x4d, 0 xee, 0 x18, 0 x50, 0 x0e)]
interface ISpTTSEngine(ISpTTSEngineVtbl): IUnknown(IUnknownVtbl) {
fn Speak(
dwSpeakFlags: DWORD,
rguidFormatId: REFGUID,
pWaveFormatEx: *const WAVEFORMATEX,
pTextFragList: *const SPVTEXTFRAG,
pOutputSite: *mut ISpTTSEngineSite,
) -> HRESULT,
fn GetOutputFormat(
pTargetFmtId: *const GUID,
pTargetWaveFormatEx: *const WAVEFORMATEX,
pOutputFormatId: *mut GUID,
ppCoMemOutputWaveFormatEx: *mut WAVEFORMATEX,
) -> HRESULT,
}}
STRUCT !{struct SPWORDENTRY {
hWord: SPWORDHANDLE,
LangID: WORD,
pszDisplayText: *mut WCHAR,
pszLexicalForm: *mut WCHAR,
aPhoneId: *mut SPPHONEID,
pvClientContext: *mut c_void,
}}
STRUCT !{struct SPRULEENTRY {
hRule: SPRULEHANDLE,
hInitialState: SPSTATEHANDLE,
Attributes: DWORD,
pvClientRuleContext: *mut c_void,
pvClientGrammarContext: *mut c_void,
}}
ENUM !{enum SPTRANSITIONTYPE {
SPTRANSEPSILON = 0 ,
SPTRANSWORD,
SPTRANSRULE,
SPTRANSTEXTBUF,
SPTRANSWILDCARD,
SPTRANSDICTATION,
}}
STRUCT !{struct SPTRANSITIONENTRY_u_s1 {
hRuleInitialState: SPSTATEHANDLE,
hRule: SPRULEHANDLE,
pvClientRuleContext: *mut c_void,
}}
STRUCT !{struct SPTRANSITIONENTRY_u_s2 {
hWord: SPWORDHANDLE,
pvClientWordContext: *mut c_void,
}}
UNION!{union SPTRANSITIONENTRY_u {
[usize; 3 ],
s1 s1_mut: SPTRANSITIONENTRY_u_s1,
s2 s2_mut: SPTRANSITIONENTRY_u_s2,
pvGrammarCookie pvGrammarCookie_mut: *mut c_void,
}}
STRUCT !{struct SPTRANSITIONENTRY {
ID: SPTRANSITIONID,
hNextState: SPSTATEHANDLE,
Type : BYTE,
RequiredConfidence: c_char,
fHasProperty: DWORD,
Weight: c_float,
u: SPTRANSITIONENTRY_u,
}}
STRUCT !{struct SPTRANSITIONPROPERTY {
pszName: LPCWSTR,
ulId: ULONG,
pszValue: LPCWSTR,
vValue: VARIANT,
}}
STRUCT !{struct SPSTATEINFO {
cAllocatedEntries: ULONG,
pTransitions: *mut SPTRANSITIONENTRY,
cEpsilons: ULONG,
cRules: ULONG,
cWords: ULONG,
cSpecialTransitions: ULONG,
}}
STRUCT !{struct SPPATHENTRY {
hTransition: SPTRANSITIONID,
elem: SPPHRASEELEMENT,
}}
RIDL!{#[ uuid(0 x6a6ffad8, 0 x78b6, 0 x473d, 0 xb8, 0 x44, 0 x98, 0 x15, 0 x2e, 0 x4f, 0 xb1, 0 x6b)]
interface ISpCFGInterpreterSite(ISpCFGInterpreterSiteVtbl): IUnknown(IUnknownVtbl) {
fn AddTextReplacement(
pReplace: *mut SPPHRASEREPLACEMENT,
) -> HRESULT,
fn AddProperty(
pProperty: *const SPPHRASEPROPERTY,
) -> HRESULT,
fn GetResourceValue(
pszResourceName: LPCWSTR,
ppCoMemResource: *mut LPWSTR,
) -> HRESULT,
}}
RIDL!{#[ uuid(0 xf3d3f926, 0 x11fc, 0 x11d3, 0 xbb, 0 x97, 0 x00, 0 xc0, 0 x4f, 0 x8e, 0 xe6, 0 xc0)]
interface ISpCFGInterpreter(ISpCFGInterpreterVtbl): IUnknown(IUnknownVtbl) {
fn InitGrammar(
pszGrammarName: LPCWSTR,
pvGrammarData: *mut *const c_void,
) -> HRESULT,
fn Interpret(
pPhrase: *mut ISpPhraseBuilder,
ulFirstElement: *const ULONG,
ulCountOfElements: *const ULONG,
pSite: *mut ISpCFGInterpreterSite,
) -> HRESULT,
}}
ENUM !{enum SPCFGNOTIFY {
SPCFGN_ADD,
SPCFGN_REMOVE,
SPCFGN_INVALIDATE,
SPCFGN_ACTIVATE,
SPCFGN_DEACTIVATE,
}}
ENUM !{enum SPRESULTTYPE {
SPRT_CFG = 0 ,
SPRT_SLM = 1 ,
SPRT_PROPRIETARY = 2 ,
SPRT_FALSE_RECOGNITION = 1 << 2 ,
}}
STRUCT !{struct SPPHRASEALT {
pPhrase: *mut ISpPhraseBuilder,
ulStartElementInParent: ULONG,
cElementsInParent: ULONG,
cElementsInAlternate: ULONG,
pvAltExtra: *mut c_void,
cbAltExtra: ULONG,
}}
STRUCT !{struct SPRECORESULTINFO {
cbSize: ULONG,
eResultType: SPRESULTTYPE,
fHypothesis: BOOL,
fProprietaryAutoPause: BOOL,
ullStreamPosStart: ULONGLONG,
ullStreamPosEnd: ULONGLONG,
hGrammar: SPGRAMMARHANDLE,
ulSizeEngineData: ULONG,
pvEngineData: *mut c_void,
pPhrase: *mut ISpPhraseBuilder,
aPhraseAlts: *mut SPPHRASEALT,
ulNumAlts: ULONG,
}}
ENUM !{enum SPWORDINFOOPT {
SPWIO_NONE = 0 ,
SPWIO_WANT_TEXT = 1 ,
}}
ENUM !{enum SPRULEINFOOPT {
SPRIO_NONE = 0 ,
}}
STRUCT !{struct SPPARSEINFO {
cbSize: ULONG,
hRule: SPRULEHANDLE,
ullAudioStreamPosition: ULONGLONG,
ulAudioSize: ULONG,
cTransitions: ULONG,
pPath: *mut SPPATHENTRY,
SREngineID: GUID,
ulSREnginePrivateDataSize: ULONG,
pSREnginePrivateData: *const BYTE,
fHypothesis: BOOL,
}}
RIDL!{#[ uuid(0 x3b414aec, 0 x720c, 0 x4883, 0 xb9, 0 xef, 0 x17, 0 x8c, 0 xd3, 0 x94, 0 xfb, 0 x3a)]
interface ISpSREngineSite(ISpSREngineSiteVtbl): IUnknown(IUnknownVtbl) {
fn Read(
pv: *mut c_void,
cb: ULONG,
pcbRead: *mut ULONG,
) -> HRESULT,
fn DataAvailable(
pcb: *mut ULONG,
) -> HRESULT,
fn SetBufferNotifySize(
cbSize: ULONG,
) -> HRESULT,
fn ParseFromTransitions(
pParseInfo: *const SPPARSEINFO,
ppNewPhrase: *mut *mut ISpPhraseBuilder,
) -> HRESULT,
fn Recognition(
pResultInfo: *const SPRECORESULTINFO,
) -> HRESULT,
fn AddEvent(
pEvent: *const SPEVENT,
hSAPIRecoContext: SPRECOCONTEXTHANDLE,
) -> HRESULT,
fn Synchronize(
ullProcessedThruPos: ULONGLONG,
) -> HRESULT,
fn GetWordInfo(
pWordEntry: *mut SPWORDENTRY,
Options: SPWORDINFOOPT,
) -> HRESULT,
fn SetWordClientContext(
hWord: SPWORDHANDLE,
pvClientContext: *mut c_void,
) -> HRESULT,
fn GetRuleInfo(
pRuleEntry: *mut SPRULEENTRY,
Options: SPRULEINFOOPT,
) -> HRESULT,
fn SetRuleClientContext(
hRule: SPRULEHANDLE,
pvClientContext: *mut c_void,
) -> HRESULT,
fn GetStateInfo(
hState: SPSTATEHANDLE,
pStateInfo: *mut SPSTATEINFO,
) -> HRESULT,
fn GetResource(
hRule: SPRULEHANDLE,
pszResourceName: LPCWSTR,
ppCoMemResource: *mut LPWSTR,
) -> HRESULT,
fn GetTransitionProperty(
ID: SPTRANSITIONID,
ppCoMemProperty: *mut *mut SPTRANSITIONPROPERTY,
) -> HRESULT,
fn IsAlternate(
hRule: SPRULEHANDLE,
hAltRule: SPRULEHANDLE,
) -> HRESULT,
fn GetMaxAlternates(
hRule: SPRULEHANDLE,
pulNumAlts: *mut ULONG,
) -> HRESULT,
fn GetContextMaxAlternates(
hContext: SPRECOCONTEXTHANDLE,
pulNumAlts: *mut ULONG,
) -> HRESULT,
fn UpdateRecoPos(
ullCurrentRecoPos: ULONGLONG,
) -> HRESULT,
}}
ENUM !{enum SPPROPSRC {
SPPROPSRC_RECO_INST,
SPPROPSRC_RECO_CTX,
SPPROPSRC_RECO_GRAMMAR,
}}
RIDL!{#[ uuid(0 x2f472991, 0 x854b, 0 x4465, 0 xb6, 0 x13, 0 xfb, 0 xaf, 0 xb3, 0 xad, 0 x8e, 0 xd8)]
interface ISpSREngine(ISpSREngineVtbl): IUnknown(IUnknownVtbl) {
fn SetSite(
pSite: *mut ISpSREngineSite,
) -> HRESULT,
fn GetInputAudioFormat(
pguidSourceFormatId: *const GUID,
pSourceWaveFormatEx: *const WAVEFORMATEX,
pguidDesiredFormatId: *mut GUID,
ppCoMemDesiredWaveFormatEx: *mut WAVEFORMATEX,
) -> HRESULT,
fn RecognizeStream(
rguidFmtId: REFGUID,
pWaveFormatEx: *const WAVEFORMATEX,
hRequestSync: HANDLE,
hDataAvailable: HANDLE,
hExit: HANDLE,
fNewAudioStream: BOOL,
fRealTimeAudio: BOOL,
pAudioObjectToken: *mut ISpObjectToken,
) -> HRESULT,
fn SetRecoProfile(
pProfile: *mut ISpObjectToken,
) -> HRESULT,
fn OnCreateGrammar(
pvEngineRecoContext: *mut c_void,
hSAPIGrammar: SPGRAMMARHANDLE,
ppvEngineGrammarContext: *mut *mut c_void,
) -> HRESULT,
fn OnDeleteGrammar(
pvEngineGrammar: *mut c_void,
) -> HRESULT,
fn LoadProprietaryGrammar(
pvEngineGrammar: *mut c_void,
rguidParam: REFGUID,
pszStringParam: LPCWSTR,
pvDataParam: *const c_void,
ulDataSize: ULONG,
Options: SPLOADOPTIONS,
) -> HRESULT,
fn UnloadProprietaryGrammar(
pvEngineGrammar: *mut c_void,
) -> HRESULT,
fn SetProprietaryRuleState(
pvEngineGrammar: *mut c_void,
pszName: LPCWSTR,
pReserved: *mut c_void,
NewState: SPRULESTATE,
pcRulesChanged: *mut ULONG,
) -> HRESULT,
fn SetProprietaryRuleIdState(
pvEngineGrammar: *mut c_void,
dwRuleId: DWORD,
NewState: SPRULESTATE,
) -> HRESULT,
fn LoadSLM(
pvEngineGrammar: *mut c_void,
pszTopicName: LPCWSTR,
) -> HRESULT,
fn UnloadSLM(
pvEngineGrammar: *mut c_void,
) -> HRESULT,
fn SetSLMState(
pvEngineGrammar: *mut c_void,
NewState: SPRULESTATE,
) -> HRESULT,
fn SetWordSequenceData(
pvEngineGrammar: *mut c_void,
pText: *const WCHAR,
cchText: ULONG,
pInfo: *const SPTEXTSELECTIONINFO,
) -> HRESULT,
fn SetTextSelection(
pvEngineGrammar: *mut c_void,
pInfo: *const SPTEXTSELECTIONINFO,
) -> HRESULT,
fn IsPronounceable(
pvEngineGrammar: *mut c_void,
pszWord: LPCWSTR,
pWordPronounceable: *mut SPWORDPRONOUNCEABLE,
) -> HRESULT,
fn OnCreateRecoContext(
hSAPIRecoContext: SPRECOCONTEXTHANDLE,
ppvEngineContext: *mut *mut c_void,
) -> HRESULT,
fn OnDeleteRecoContext(
pvEngineContext: *mut c_void,
) -> HRESULT,
fn OnPrivateCall(
pvEngineContext: *mut c_void,
pCallFrame: PVOID,
ulCallFrameSize: ULONG,
) -> HRESULT,
fn SetAdaptationData(
pvEngineContext: *mut c_void,
pAdaptationData: *const WCHAR,
cch: ULONG,
) -> HRESULT,
fn SetPropertyNum(
eSrc: SPPROPSRC,
pvSrcObj: *mut c_void,
pName: *const WCHAR,
lValue: LONG,
) -> HRESULT,
fn GetPropertyNum(
eSrc: SPPROPSRC,
pvSrcObj: *mut c_void,
pName: *const WCHAR,
lValue: *mut LONG,
) -> HRESULT,
fn SetPropertyString(
eSrc: SPPROPSRC,
pvSrcObj: *mut c_void,
pName: LPCWSTR,
pValue: LPCWSTR,
) -> HRESULT,
fn GetPropertyString(
eSrc: SPPROPSRC,
pvSrcObj: *mut c_void,
pName: LPCWSTR,
ppCoMemValue: *mut LPWSTR,
) -> HRESULT,
fn SetGrammarState(
pvEngineGrammar: *mut c_void,
eGrammarState: SPGRAMMARSTATE,
) -> HRESULT,
fn WordNotify(
Action: SPCFGNOTIFY,
cWords: ULONG,
pWords: *const SPWORDENTRY,
) -> HRESULT,
fn RuleNotify(
Action: SPCFGNOTIFY,
cRules: ULONG,
pRules: *const SPRULEENTRY,
) -> HRESULT,
fn PrivateCallEx(
pvEngineContext: *mut c_void,
pInCallFrame: *const c_void,
ulInCallFrameSize: ULONG,
ppvCoMemResponse: *mut *mut c_void,
pulResponseSize: *mut ULONG,
) -> HRESULT,
fn SetContextState(
pvEngineContext: *mut c_void,
eContextState: SPCONTEXTSTATE,
) -> HRESULT,
}}
STRUCT !{struct SPPHRASEALTREQUEST {
ulStartElement: ULONG,
cElements: ULONG,
ulRequestAltCount: ULONG,
pvResultExtra: *mut c_void,
cbResultExtra: ULONG,
pPhrase: *mut ISpPhrase,
pRecoContext: *mut ISpRecoContext,
}}
RIDL!{#[ uuid(0 x8e7c791e, 0 x4467, 0 x11d3, 0 x97, 0 x23, 0 x00, 0 xc0, 0 x4f, 0 x72, 0 xdb, 0 x08)]
interface _ISpPrivateEngineCall(_ISpPrivateEngineCallVtbl): IUnknown(IUnknownVtbl) {
fn CallEngine(
pCallFrame: *mut c_void,
ulCallFrameSize: ULONG,
) -> HRESULT,
fn CallEngineEx(
pInFrame: *const c_void,
ulInFrameSize: ULONG,
ppCoMemOutFrame: *mut *mut c_void,
pulOutFrameSize: *mut ULONG,
) -> HRESULT,
}}
extern {
pub static LIBID_SpeechDDKLib: IID;
pub static CLSID_SpDataKey: CLSID;
}
RIDL!{#[ uuid(0 xd9f6ee60, 0 x58c9, 0 x458b, 0 x88, 0 xe1, 0 x2f, 0 x90, 0 x8f, 0 xd7, 0 xf8, 0 x7c)]
class SpDataKey;}
extern {
pub static CLSID_SpObjectTokenEnum: CLSID;
pub static CLSID_SpPhraseBuilder: CLSID;
pub static CLSID_SpITNProcessor: CLSID;
pub static CLSID_SpGrammarCompiler: CLSID;
pub static CLSID_SpGramCompBackend: CLSID;
}
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-26)
¤
*© Formatika GbR, Deutschland