Отладка sapi5 преобразования текста в речь

В настоящее время я работаю над механизмом TTS, и моя задача — сделать его совместимым с Microsoft SAPI5. Я следил за руководством здесь с примерами проектов SAPI и успешно построили библиотеку движка. Я зарегистрировал dll с помощью regsvr32 и добавил голос в реестр. Однако, когда приложение (в моем случае средство чтения с экрана NVDA) вызвало мой движок, я получил сообщение об ошибке (из журнала NVDA)

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

Я, очевидно, сделал что-то не так с движком, но я понятия не имею, как я могу отладить это.


person AtheS21    schedule 24.04.2017    source источник
comment
Работает ли ваш модуль TTS при вызове из другого приложения (например, TTSApp образец)? Это гораздо более простое приложение для начала.   -  person Eric Brown    schedule 24.04.2017
comment
Я пытался, но не повезло. Та же ошибка, класс не зарегистрирован. Дело в том, что когда я регистрировался с помощью regsvr32, он сказал, что успешно. я тут совсем потерялся   -  person AtheS21    schedule 24.04.2017


Ответы (2)


Вы должны отлаживать NVDA, а не движок. Вам нужно выяснить, к какому классу он пытается получить доступ. Как только вы это выясните, вам нужно проверить, почему вы неправильно зарегистрировали свой движок в реестре COM.

Подробнее см.

Ошибка 80040154 (исключение класса не зарегистрировано) при инициализации VCProjectEngineObject (Microsoft. VisualStudio.VCProjectEngine.dll)

person Nikolay Shmyrev    schedule 24.04.2017
comment
Извините за поздний ответ. Насколько мне известно, класс здесь относится к классу COM, который я реализовал ISpTTSEngine и ISpObjectWithToken для работы с sapi, и я, конечно, хочу знать, почему он не был зарегистрирован, потому что он успешно зарегистрирован, по крайней мере, как мне сказали. Проблема может быть не в том случае, упомянутом в вашей ссылке, потому что мой целевой движок - 32-битный, а приложение (NVDA) работает с другим 32-битным движком (в любом случае, я не могу переключиться на x64, потому что я использую некоторую библиотеку, которая имеет только 32-битную версию ) - person AtheS21; 24.04.2017
comment
Обеспечьте вывод dumpbin - person Nikolay Shmyrev; 24.04.2017
comment
Вы имеете в виду помойку dll? drive.google.com/file/d/0B8Aq_py2DfCBdGxWUTZJdzhTZFU/ - person AtheS21; 25.04.2017
comment
dumpbin /exports ответ говорит - person Nikolay Shmyrev; 25.04.2017
comment
drive.google.com/file/d/0B8Aq_py2DfCBWEVIU3NhWjNlZ3c/ извините, я действительно не привык к этому, поэтому я подумал / все должно быть хорошо. - person AtheS21; 25.04.2017
comment
Не похоже, чтобы ваши методы SAPI экспортировались должным образом. Вы уверены, что добавили dllexport ко всем из них? - person Nikolay Shmyrev; 25.04.2017
comment
Теперь вам нужно зарегистрировать его снова, я полагаю. - person Nikolay Shmyrev; 25.04.2017
comment
Я немного запутался здесь, ваше утверждение имело для меня большой смысл, поэтому я перепроверил и увидел, что образец движка из SAPI также не экспортирует эти 4 метода по умолчанию, ничего больше, и он все еще работает Образец dll не имеет методов из sapi экспортируется - person AtheS21; 25.04.2017

Согласно образцу SAPI, в файле idl объявлена ​​​​библиотека (с libid) и класс моего движка (с clsid), затем есть файл .rgs, который, в свою очередь, зарегистрирует движок в реестре, в моей проблеме я потерял clsid с либидом, следовательно, двигатель не зарегистрирован должным образом.

person AtheS21    schedule 25.04.2017