我從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頭中複製定義。 –