2017-04-24 4 views
1

Je travaille actuellement sur un moteur TTS et mon travail consiste à le rendre compatible avec Microsoft SAPI5. J'ai suivi le tutoriel here un long avec les exemples de projets SAPI et construit avec succès la DLL du moteur. J'ai enregistré la DLL avec regsvr32 et joint la voix dans le registre. Cependant, quand une application (lecteur d'écran NVDA dans mon cas) a appelé mon moteur, je suis arrivé l'erreur (du journal NVDA)Debug sapi5 moteur de synthèse vocale

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

J'ai évidemment fait quelque chose de mal avec le moteur, mais je ne sais pas comment je pourrais debug ce.

+0

Votre moteur TTS fonctionne-t-il lorsqu'il est appelé à partir d'une autre application (par exemple, l'exemple [TTSApp] (https://msdn.microsoft.com/en-us/library/ee125104 (v = vs.85) .aspx)) ? C'est une application beaucoup plus simple pour commencer. –

+0

J'ai essayé mais pas de chance. C'est la même erreur, classe non enregistrée. La chose est quand je me suis inscrit en utilisant regsvr32, il a dit "avec succès". Je suis totalement perdu ici – AtheS21

+1

Vous devriez vraiment ajouter la résolution comme réponse (si elle n'est pas déjà couverte par l'autre réponse). En outre, il n'y a pas vraiment une convention d'ajouter "[RESOLU]" dans le titre - typiquement, vous voulez [accepter la réponse] (http://stackoverflow.com/help/accepted-answer) qui a résolu le problème. (Notez que vous pouvez ajouter une réponse à votre propre question et l'accepter si vous avez trouvé une solution différente de ce que les autres personnes ont posté ici). – EJoshuaS

Répondre

0

Selon échantillon SAPI, dans le fichier IDL a déclaré une bibliothèque (avec LIBID) et ma classe de moteur (avec CLSID), alors il y a un fichier .rgs qui à son tour va enregistrer le moteur dans le registre, dans mon problème j'ai égaré le clsid avec le libid, d'où le moteur n'est pas enregistré correctement.

0

Vous devez déboguer NVDA, pas le moteur. Vous devez déterminer à quelle classe il essaie d'accéder. Une fois que vous avez compris cela, vous devez vérifier pourquoi vous n'avez pas correctement enregistré votre moteur dans le registre COM.

Pour plus de détails, voir

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

+0

désolé pour la réponse tardive. Selon ma connaissance, la classe se réfère ici à la classe COM que j'ai implémentée ISpTTSEngine et ISpObjectWithToken pour travailler avec sapi et je veux sûrement savoir pourquoi elle n'a pas été enregistrée, car elle est enregistrée avec succès, du moins comme on me l'a dit. Le problème peut ne pas être le cas mentionné dans votre lien car la cible de mon moteur est 32bit et l'application (NVDA) fonctionne avec un autre moteur 32 bits (de toute façon, je ne peux pas passer en x64 car j'utilise une lib – AtheS21

+0

Fournit la sortie de dumpbin –

+0

Vous voulez dire dumpbin de la DLL? https://drive.google.com/file/d/0B8Aq_py2DfCBdGxWUTZJdzhTZFU/view?usp=sharing – AtheS21