C++调用sapi.h在无VS2015的机器上报0xc000007b
这两天一直被这个问题困扰,还请大神搭救!简单描述如下:
我想用C++写一个dll通过JNI在java里调用,这个dll主要负责接收来自java的字符串,并调用windows的TTS朗读出来。
功能在我的机器上可以运行,但是到了没有VS的电脑上就报错,一般的错误是缺少某个dll,如果将所有依赖的dll都复制目标机器上,报的就不是缺少dll,而是应用程序无法启动0xc000007b的错误。
由于这里是C++的板块,所以简单起见和更好的说明问题,现在在VS2015里用C++写一个控制台程序对问题做详细说明。
以下是程序代码:
#include <sapi.h>
#include <stdio.h>//C头文件,用来提示错误信息
int main()
{
::CoInitialize(NULL);//初始化语音环境
ISpVoice * pSpVoice = NULL;//初始化语音变量
if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void **)&pSpVoice)))
//给语音变量创建环境,相当于创建语音变量,FAILED是个宏定义,就是来判断CoCreateInstance这个函数又没有成功创建语音变量,下面是不成功的提示信息。
{
printf("Failed to create instance of ISpVoice!\n");
return -1;
}
pSpVoice->Speak(L"可以合成语音么?", SPF_DEFAULT, NULL);//执行语音变量的Speek函数,这个函数用来读文字。
pSpVoice->Release(); //释放语音变量
::CoUninitialize();//释放语音环境
return 0;
}
以下是程序依赖的dll
以下是在非VS环境中的运行结果
猜想应该是缺少什么文件导致的,网上说在其他机器上要有sapi组件,但我试过了在目标机器上安装组件也没用
还请了解这方面的大神解惑,感激不尽!!!!!! 本帖最后由 ba21 于 2017-6-15 23:03 编辑
老师 发表于 2017-6-15 22:26
1、有没有一劳永逸的办法,如果让用户自己去找这么多,显然是不可能的,有没有方法将环境一起弄出来。
2 ...
1,安装完常用的vc++运行库后。
2,提示缺少ucrtbase.dll, vcruntime140d.dll 。把这两个文件复得到C:\Windows\SysWOW64 下 程序运行一闪而过。
跟你的tts程序放什么位置没关系。
win7 64。 win10 64 测试通过
如果你需要现成的vc++运行库安装文件我这里有: http://pan.baidu.com/s/1nuHBAxb
ucrtbase.dll, vcruntime140d.dll 下载地址:http://pan.baidu.com/s/1kVp5A2F
没有VS的机子说明没有运行库,你把.net 和 vc++ 运行库都装上试试 ba21 发表于 2017-6-15 14:37
没有VS的机子说明没有运行库,你把.net 和 vc++ 运行库都装上试试
我试过了,依然如此
这么高的悬赏,难道就没人要么,回复这么少,自己顶,有大神请指教啊 老师 发表于 2017-6-15 19:56
我试过了,依然如此
这么高的悬赏,难道就没人要么,回复这么少,自己顶,有大神请指教啊
把程序留下。我来试试 再看看你的编译环境参考 http://blog.csdn.net/edd1e/article/details/44918719 ba21 发表于 2017-6-15 20:02
把程序留下。我来试试
这里是程序 ba21 发表于 2017-6-15 20:07
再看看你的编译环境参考 http://blog.csdn.net/edd1e/article/details/44918719
我是64编译的,也是在64上测试的,不行 事实证明你就是缺少vc++ 运行库,参考 下图。已安装的vc++ 运行库, 提示缺少ucrtbase.dll, vcruntime140d.dll 。把这两个文件复得到C:\Windows\SysWOW64 下 程序运行一闪而过。 win7 64。 win10 64 测试通过
ba21 发表于 2017-6-15 20:42
事实证明你就是缺少vc++ 运行库,参考 下图。已安装的vc++ 运行库, 提示缺少ucrtbase.dll, vcruntime140d ...
是不是都要装上:050810121315都要 老师 发表于 2017-6-15 21:14
是不是都要装上:050810121315都要
是的!对应的版本都要安装上 关于SAPI的使用可以参见我的语音朗读小程序,
注意:SAPI并不是支持所有平台的, ba21 发表于 2017-6-15 21:21
是的!对应的版本都要安装上
1、有没有一劳永逸的办法,如果让用户自己去找这么多,显然是不可能的,有没有方法将环境一起弄出来。
2、我上面用VS015工具查看了所有的依赖,包也都放在程序目录里了,还是会错(包括你上面提到的VCRUNTIME140.dll),这又怎么解释呢 老师 发表于 2017-6-15 22:26
1、有没有一劳永逸的办法,如果让用户自己去找这么多,显然是不可能的,有没有方法将环境一起弄出来。
2 ...
没有。用VS就必须要安装相应的运行库。
这是常识!不同环境编译出来的程序所要用的的运行库就不一样。 这就是VS
1,常用vc++ 运行库打包安装vc++运行库(2005,2008,2010,2012,2013,2015)_x86_x64(像我们封装系统都会把这里安装上)
2,刚刚ucrtbase.dll, vcruntime140d.dll 不知道是哪个版本的;你可以在你的电脑上复制出来 ba21 发表于 2017-6-15 20:42
事实证明你就是缺少vc++ 运行库,参考 下图。已安装的vc++ 运行库, 提示缺少ucrtbase.dll, vcruntime140d ...
以下是我装玩所有的运行库的结果,然后我也将程序依赖到的dll都放到了程序同级目录下,结果还是如此
系统win10官方工具制作的iso freeparty 发表于 2017-6-15 22:23
关于SAPI的使用可以参见我的语音朗读小程序,
注意:SAPI并不是支持所有平台的,
win10肯定支持的把,还有请问你的程序呢???? 老师 发表于 2017-6-16 11:14
win10肯定支持的把,还有请问你的程序呢????
兄弟,跟你说得这么详细了还不能结贴?你的50B也太难挣了吧。 老师 发表于 2017-6-16 11:12
以下是我装玩所有的运行库的结果,然后我也将程序依赖到的dll都放到了程序同级目录下,结果还是如此
...
请把你的整个程序传上来。单个tts.exe win7 win10我这测了没问题 ba21 发表于 2017-6-16 11:35
请把你的整个程序传上来。单个tts.exe win7 win10我这测了没问题
请问测试系统上装了VS么?
这里是整个项目的包,项目名是TTS,上传的时候改了下
https://pan.baidu.com/s/1dFovUz3 ba21 发表于 2017-6-16 11:33
兄弟,跟你说得这么详细了还不能结贴?你的50B也太难挣了吧。
我也想早点解决啊,好久了都,但正如截图,它就是这样
页:
[1]
2