我从SAPI 5.1提供的头文件中得到了很多错误,但无法弄清楚如何解决这些问题。如何修复SAPI 5.1头文件中的编译错误
以下是一个简单的文字转语音程序Microsoft’s How to Video Presentation。主持人说,如果你已经安装了最新的软件包,你将没有问题编译这个程序。但他正在使用Video Studio 2005;显然,“最新”是指几年前提交报告时的情况。
我认为这些错误是导致版本错失匹配。我正在使用Windows XP SP3。我有Visual Studio 2008 SP1,Visual Studio 2008 SDK 1.1,Windows SDK v6.0A(附带VS2008),Windows SDK v7.0和SAPI 5.1。有人能帮我弄清楚这些问题吗?
TTSdemo.cpp
#include <windows.h>
#include <atlbase.h>
#include <sapi.h>
#include <sphelper.h>
#include <string>
#include <iostream>
int wmain(int argc, wchar_t **argv)
{
int i;
ULONG n;
HRESULT hr;
std::wstring args;
CComPtr<ISpObjecToken> token;
CComPtr<ISpVoice> tts;
CoInitialize(0);
for (i = 1, args = L""; i < argc; i++)
{
args.append(argv[i]);
args.append(L" ");
}
tts.CoCreateInstance(CLSID_SpVoice);
hr = SpGetDefaultTokenFromCategoryId(SPCAT_VOICES, &token, FALSE);
hr = tts->SetVoice(token);
if (args.length() == 0)
std::wcout << L"Enter @<text file name> or <text to speak>" << STD::endl;
else if (args(0) == L'@')
tts->Speak(args.c_str() + 1, SPF_IS_FILENAME | SPF_ASYNC, &n);
else
tts->Speak(args.c_str(), SPF_IS_XML | SPF_ASYNC, &n);
tts->WaitUntilDone(-1);
tts.Release();
token.Release();
CoUninitialize();
return 0;
}
编译器错误
C:\程序Files \ Microsoft语音SDK 5.1 \包括\ spdebug.h(274): 警告C4996: 'wcscpy':这个函数或变量可能是不安全的。 请考虑使用wcscpy_s代替。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。详细信息请参见在线帮助。
C:\程序Files \ Microsoft的Visual Studio 9.0 \ VC \包括\ string.h中(252) :见 'wcscpy' 的申报
C:\程序Files \ Microsoft语音SDK 5.1 \包括\ sphelper.h(769): 错误C4430:缺少类型说明符 - 假定为int。注意:C++不 支持默认int
C:\ Program Files文件\的Microsoft Speech SDK 5.1 \ \包括sphelper.h(1419): 错误C4430:缺少类型说明符 - 假定为int。注意:C++不 支持默认int
C:\程序Files \ Microsoft语音SDK 5.1 \包括\ sphelper.h(2373): 错误C2065:PSZ':未声明的标识符
C: \ program files \ microsoft speech sdk 5.1 \ include \ sphelper.h(2559): 错误C2440:'初始化':无法从'CSpDynamicString' 转换为'SPPHONEID *' 可执行的用户定义转换运算符此转换或操作员不能调用
c:\ program files \ microsoft speech sdk 5.1 \ include \ sphel per.h(2633): 错误C2664:'wcslen':无法将参数1从'SPPHONEID *' 转换为'const wchar_t *' 指向的类型不相关;转换需要reinterpret_cast,C风格演员阵容或功能风格演员表
SAPI的可下载版本越来越老了。旧软件的行为不像旧酒。请告诉,在sphelper.h行#769周围显示+/- 5行代码。 –
尝试从Windows SDK 6.1或更高版本的SAPI头中复制定义。 –