【问题标题】:Debug sapi5 text to speech engine调试 sapi5 文本转语音引擎
【发布时间】:2017-09-20 15:49:21
【问题描述】:

我目前正在开发 TTS 引擎,我的工作是使其与 Microsoft SAPI5 兼容。我按照教程here 做了很长的 SAPI 示例项目,并成功构建了引擎 dll。我用 regsvr32 注册了 dll 并将语音附加到注册表中。但是,当应用程序(在我的例子中是 NVDA 屏幕阅读器)调用我的引擎时,我收到了错误(来自 NVDA 日志)

COMError: (-2147221164, 'Class not registered', (None, None, None, 0, None))

我显然在引擎上做错了,但我不知道如何调试它。

【问题讨论】:

  • 从另一个应用程序调用时,您的 TTS 引擎是否正常工作(例如,TTSApp 示例)?这是一个更简单的应用程序。
  • 我确实尝试过,但没有成功。这是同样的错误,类未注册。问题是当我使用 regsvr32 注册时,它说“成功”。我完全迷路了

标签: c++ text-to-speech sapi nvda


【解决方案1】:

您必须调试 NVDA,而不是引擎。您需要弄清楚它尝试访问哪个类。一旦你弄清楚了,你需要检查为什么你没有在 COM 注册表中正确注册你的引擎。

更多详情见

Error 80040154 (Class not registered exception) when initializing VCProjectEngineObject (Microsoft.VisualStudio.VCProjectEngine.dll)

【讨论】:

  • 抱歉回复晚了。据我所知,这里的类是指我实现 ISpTTSEngine 和 ISpObjectWithToken 以与 sapi 一起使用的 COM 类,我当然想知道它为什么没有注册,因为它已成功注册,至少正如我被告知的那样。问题可能不是您的链接中提到的情况,因为我的引擎的目标是 32 位,并且应用程序(NVDA)确实可以与其他 32 位引擎一起使用(无论哪种方式,我都无法切换到 x64,因为我使用了一些只有 32 位版本的库)
  • 提供dumpbin的输出
  • dumpbin /exports 答案说
  • drive.google.com/file/d/0B8Aq_py2DfCBWEVIU3NhWjNlZ3c/… 抱歉,我不太习惯这个,所以我认为 /all 应该很好。
【解决方案2】:

根据 SAPI 示例,在 idl 文件中声明了一个库(带有 libid)和我的引擎类(带有 clsid),然后有一个 .rgs 文件,该文件又会将引擎注册到注册表中,在我的问题中我做到了将 clsid 与 libid 错位,因此引擎未正确注册。

【讨论】:

    猜你喜欢
    • 2012-12-16
    • 2016-06-16
    • 2011-11-05
    • 2011-05-01
    • 1970-01-01
    • 2020-10-05
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多