2011-08-29 7 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 : 경고 C4996 : 'wcscpy'\ 프로그램 파일 5.1 \는 \ spdebug.h (274)를 포함 마이크로 소프트 음성 SDK를 \ : 이 함수 또는 변수는 안전하지 않을 수 있습니다. 대신 wcscpy_s를 사용해보십시오. 지원 중단을 사용 중지하려면 _CRT_SECURE_NO_WARNINGS을 (를) 사용하십시오. 자세한 내용은 온라인 도움말을 참조하십시오.

는 C : \ 프로그램 파일 \ string.h 포함 마이크로 소프트 비주얼 스튜디오 9.0 \ 벤처 \를 \ (252) 'wcscpy'선언 참조

C : \ 프로그램 파일 5.1 \ 포함 Microsoft 음성 SDK를 \ \ sphelper.h (769) : 오류 C4430 : 누락 된 형식 지정자 - 가정합니다. 참고 : Microsoft 음성 SDK 5.1 \는 \ 포함 sphelper.h (1419) \ 프로그램 파일 \ : 오류 C4430 : C++하지 지원 기본-INT

C가하는 타입 지정자 누락이 - 가정 int입니다. 참고 : C++은하지 않습니다 지원 기본-INT

C : 오류 C2065 : 'PSZ': \ 프로그램 파일 5.1 \는 \ sphelper.h (2373)를 포함 마이크로 소프트 음성 SDK를 \ 선언되지 않은 식별자를

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 perl (2633) : 오류 C2664 : 'wcslen': 매개 변수 1을 'SPPHONEID *'에서 으로 'const wchar_t *'로 변환 할 수 없습니다. 가리키는 형식과 관련이 없습니다. 변환은 reinterpret_cast, C 스타일의 캐스트 또는 함수 스타일 캐스트가 필요합니다.

+0

다운로드 가능한 SAPI 버전이 꽤 오래되었습니다. 오래된 소프트웨어는 오래된 포도주 같이 행동하지 않습니다. Sprayper.h, # 769 행에 +/- 5 행의 코드를 보여주십시오. –

+0

Windows SDK 6.1 이상에서 SAPI 헤더의 정의를 복사하십시오. –

답변

2

"\Program Files\Microsoft SDKs\Windows\v6.0A" 또는 7.0 또는 7.0A를 사용하십시오.

는 SAPI DLL의 및 libs와 + 헤더 파일은 VS2008

즐기 호환이 있습니다.

+0

이것은 모든 오류를 수정하는 데 사용한 방법이며 완벽하게 작동했습니다. –

관련 문제