2011-08-29 80 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

這是我用來修復所有這些錯誤的方法,它完美地工作。 –

相關問題