鱼C论坛

 找回密码
 立即注册
查看: 3165|回复: 24

[已解决]C++调用sapi.h在无VS2015的机器上报0xc000007b

[复制链接]
发表于 2017-6-15 13:46:51 | 显示全部楼层 |阅读模式
50鱼币
这两天一直被这个问题困扰,还请大神搭救!
简单描述如下:
我想用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
程序依赖的dll.png


以下是在非VS环境中的运行结果
没VS的机器上运行结果.png



猜想应该是缺少什么文件导致的,网上说在其他机器上要有sapi组件,但我试过了在目标机器上安装组件也没用
还请了解这方面的大神解惑,感激不尽!!!!!!
最佳答案
2017-6-15 13:46:52
本帖最后由 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

最佳答案

查看完整内容

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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-15 13:46:52 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-15 14:37:24 | 显示全部楼层
没有VS的机子说明没有运行库,你把.net 和 vc++ 运行库都装上试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-15 19:56:50 | 显示全部楼层
ba21 发表于 2017-6-15 14:37
没有VS的机子说明没有运行库,你把.net 和 vc++ 运行库都装上试试

我试过了,依然如此
这么高的悬赏,难道就没人要么,回复这么少,自己顶,有大神请指教啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-15 20:02:06 | 显示全部楼层
老师 发表于 2017-6-15 19:56
我试过了,依然如此
这么高的悬赏,难道就没人要么,回复这么少,自己顶,有大神请指教啊

把程序留下。我来试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-15 20:07:52 | 显示全部楼层
再看看你的编译环境  参考 http://blog.csdn.net/edd1e/article/details/44918719
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-15 20:15:19 | 显示全部楼层
ba21 发表于 2017-6-15 20:02
把程序留下。我来试试

这里是程序 TTS.zip (14.1 KB, 下载次数: 16)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-15 20:19:21 | 显示全部楼层
ba21 发表于 2017-6-15 20:07
再看看你的编译环境  参考 http://blog.csdn.net/edd1e/article/details/44918719

我是64编译的,也是在64上测试的,不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-15 20:42:25 | 显示全部楼层
事实证明你就是缺少vc++ 运行库,参考 下图。已安装的vc++ 运行库, 提示缺少ucrtbase.dll, vcruntime140d.dll 。把这两个文件复得到C:\Windows\SysWOW64 下 程序运行一闪而过。 win7 64。 win10 64 测试通过
2017-06-15_203823.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-15 21:14:04 | 显示全部楼层
ba21 发表于 2017-6-15 20:42
事实证明你就是缺少vc++ 运行库,参考 下图。已安装的vc++ 运行库, 提示缺少ucrtbase.dll, vcruntime140d ...

是不是都要装上:050810121315都要
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-15 21:21:48 | 显示全部楼层
老师 发表于 2017-6-15 21:14
是不是都要装上:050810121315都要

是的!对应的版本都要安装上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-15 22:23:29 | 显示全部楼层
关于SAPI的使用可以参见我的语音朗读小程序,

注意:SAPI并不是支持所有平台的,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-15 22:26:06 | 显示全部楼层
ba21 发表于 2017-6-15 21:21
是的!对应的版本都要安装上

1、有没有一劳永逸的办法,如果让用户自己去找这么多,显然是不可能的,有没有方法将环境一起弄出来。
2、我上面用VS015工具查看了所有的依赖,包也都放在程序目录里了,还是会错(包括你上面提到的VCRUNTIME140.dll),这又怎么解释呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-15 22:43:22 | 显示全部楼层
老师 发表于 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 不知道是哪个版本的;你可以在你的电脑上复制出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-16 11:12:33 | 显示全部楼层
ba21 发表于 2017-6-15 20:42
事实证明你就是缺少vc++ 运行库,参考 下图。已安装的vc++ 运行库, 提示缺少ucrtbase.dll, vcruntime140d ...

以下是我装玩所有的运行库的结果,然后我也将程序依赖到的dll都放到了程序同级目录下,结果还是如此
安装所有VC运行库还是如此.png
系统win10官方工具制作的iso
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-16 11:14:34 | 显示全部楼层
freeparty 发表于 2017-6-15 22:23
关于SAPI的使用可以参见我的语音朗读小程序,

注意:SAPI并不是支持所有平台的,

win10肯定支持的把,还有请问你的程序呢????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-16 11:33:40 | 显示全部楼层
老师 发表于 2017-6-16 11:14
win10肯定支持的把,还有请问你的程序呢????

兄弟,跟你说得这么详细了还不能结贴?你的50B也太难挣了吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-16 11:35:31 | 显示全部楼层
老师 发表于 2017-6-16 11:12
以下是我装玩所有的运行库的结果,然后我也将程序依赖到的dll都放到了程序同级目录下,结果还是如此

...

请把你的整个程序传上来。单个tts.exe win7 win10我这测了没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-16 17:13:02 | 显示全部楼层
ba21 发表于 2017-6-16 11:35
请把你的整个程序传上来。单个tts.exe win7 win10我这测了没问题

请问测试系统上装了VS么?
这里是整个项目的包,项目名是TTS,上传的时候改了下
https://pan.baidu.com/s/1dFovUz3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-16 17:14:59 | 显示全部楼层
ba21 发表于 2017-6-16 11:33
兄弟,跟你说得这么详细了还不能结贴?你的50B也太难挣了吧。

我也想早点解决啊,好久了都,但正如截图,它就是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 22:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表