我在C ++ VS2010中创建了一个DLL。
在我看来,2个程序无法同时访问它。 第一个程序1必须完成对DLL的调用,然后DLL才会处理来自其他程序的调用。
我想知道项目设置中是否有某个开关需要设置以使DLL“多线程”。
Windows SAPI使用该DLL。一个程序(在我的例子中是两个程序)可以引用SAPI并使计算机语音(计算机语音是DLL)说话。我希望这两个程序能够同时发言,但由于它们没有(它们彼此等待),我希望我的DLL是单线程的。
谢谢。
答案 0 :(得分:4)
语音API序列化来自多个来源的语音,因此它们不会同时播放。一个将首先播放,然后播放下一个,依此类推,直到不再播放待处理的演讲。您可以通过注册表禁用此功能,如下所述: http://msdn.microsoft.com/en-us/library/ee431801(v=vs.85).aspx#_Toc494873956
特别是NoSerializeAccess
中的HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\Speech\AudioOutput\<AudioOutput1>\Attributes
值<AudioOutput1>
,其中{{1}}是音频输出设备的名称。
此信息可在http://msdn.microsoft.com/en-us/library/speechplatform_ispaudio.aspx
找到为了防止多个TTS语音或引擎同时说话,Speech Platform将输出序列化为实现ISpAudio接口的对象。要禁用对ISpAudio对象的输出序列化,请在其对象标记的Attributes文件夹中放置一个名为“NoSerializeAccess”的属性。