我在一个线程中调用sapi,得到一个错误代码:OLE错误80045006

时间:2010-12-18 16:37:29

标签: multithreading delphi sapi

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleException with message 'OLE error 80045006'.
---------------------------
Break   Continue   Help   
---------------------------

我打电话给CoInitialize。我的代码是:

hr := CoInitialize(nil);

SpVoice := TSpVoice.Create(Application);
SpVoice.Connect;
SpVoice.Speak('Test text');

CoUninitialize;

并且错误只发生在我选择neospeech语音时。

1 个答案:

答案 0 :(得分:3)

错误0x80046005是SPERR_DEVICE_BUSY:硬件设备正被另一个线程或进程使用。 MSDN说:在许多旧系统中,音频输出设备只能通过一个进程打开。在Windows XP之前的Windows版本中,只有一个进程可以打开音频输入设备。因此,如果尝试打开正由其他进程或线程使用的设备,则SPERR_DEVICE_BUSY将返回。在Windows XP(及更高版本)中,多个进程可以打开相同的音频设备