2011-08-29 78 views
1

我从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风格演员阵容或功能风格演员表

+0

SAPI的可下载版本越来越老了。旧软件的行为不像旧酒。请告诉,在sphelper.h行#769周围显示+/- 5行代码。 –

+0

尝试从Windows SDK 6.1或更高版本的SAPI头中复制定义。 –

回答

2

请使用"\Program Files\Microsoft SDKs\Windows\v6.0A"或7.0或7.0A无论计算机上有哪些最新版本。

的SAPI DLL的文件和库+头文件都在那里,为VS2008

享受兼容。

+0

这是我用来修复所有这些错误的方法,它完美地工作。 –

相关问题