【发布时间】:2014-06-19 05:09:18
【问题描述】:
为什么只有当进程作为服务运行时,Speak() 之后的以下代码才会失败,错误代码为 0x80045063 (SPERR_NOT_ACTIVE_SESSION)?
ISpVoicePtr pVoice;
CoCreateInstance(
CLSID_SpVoice,
0,
CLSCTX_INPROC_SERVER,
IID_ISpVoice, ( LPVOID * ) &pVoice
);
pVoice->SetOutput( 0, TRUE );
pVoice->Speak( L"Hello", 0, NULL );
我能想到的唯一资源是关于与桌面会话交互的服务的安全更改。 .NET 中的以下内容将在服务中工作,所以我很好奇如何使用带有或不带有 SAPI 的普通 C++ 来完成它。
System::Speech::Synthesis::SpeechSynthesizer synth;
synth.SetOutputToDefaultAudioDevice();
synth.Speak( "Hello" );
【问题讨论】: