|
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
以下是在非VS环境中的运行结果
猜想应该是缺少什么文件导致的,网上说在其他机器上要有sapi组件,但我试过了在目标机器上安装组件也没用
还请了解这方面的大神解惑,感激不尽!!!!!!
本帖最后由 ba21 于 2017-6-15 23:03 编辑
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
|