2014-03-06 108 views
1

我試圖從a Microsoft sample page運行SAPI示例。SAPI(Microsoft Speech API)CoCreateInstance失敗

當運行應用程序(具有VS2010),此行失敗:

hr = cpVoice.CoCreateInstance(CLSID_SpVoice); 

小時返回錯誤代碼,並且不執行其他所有代碼。

我不知道爲什麼我錯了,因爲我認爲正確使用該頁面中的示例代碼,並且我從未使用過此API。

這是我完整的main.cpp文件。我錯過了什麼?

#include "stdafx.h" 
#include <sapi.h> 
#include <sphelper.h> 
#include <atlcomcli.h> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    HRESULT hr = S_OK; 
    CComPtr <ISpVoice>  cpVoice; 
    CComPtr <ISpStream>  cpStream; 
    CSpStreamFormat   cAudioFmt; 

    //Create a SAPI Voice 
    hr = cpVoice.CoCreateInstance(CLSID_SpVoice); 

    //Set the audio format 
    if(SUCCEEDED(hr)) 
    { 
     hr = cAudioFmt.AssignFormat(SPSF_22kHz16BitMono); 
    } 

    //Call SPBindToFile, a SAPI helper method, to bind the audio stream to the file 
    if(SUCCEEDED(hr)) 
    { 

     hr = SPBindToFile(L"c:\\ttstemp.wav", SPFM_CREATE_ALWAYS, 
      &cpStream, & cAudioFmt.FormatId(),cAudioFmt.WaveFormatExPtr()); 
    } 

    //set the output to cpStream so that the output audio data will be stored in cpStream 
    if(SUCCEEDED(hr)) 
    { 
     hr = cpVoice->SetOutput(cpStream, TRUE); 
    } 

    //Speak the text "hello world" synchronously 
    if(SUCCEEDED(hr)) 
    { 
     hr = cpVoice->Speak(L"Hello World", SPF_DEFAULT, NULL); 
    } 

    //close the stream 
    if(SUCCEEDED(hr)) 
    { 
     hr = cpStream->Close(); 
    } 

    //Release the stream and voice object  
    cpStream.Release(); 
    cpVoice.Release(); 

    return 0; 
} 
+0

你告訴使用HRESULT是一個錯誤代碼,但你沒有說明代碼是什麼。 –

+0

@AdrianMcCarthy你是對的。我的歉意(我遲到了,我回到了我的女朋友生日派對的家中......)。下次我會更加小心。 – Jepessen

回答

1

你必須使用CoInitialize[Ex]線程初始化使用CoCreateInstance API之前。你得到的錯誤代碼應該明確暗示:CO_E_NOTINITIALIZED(你應該在你的問題上發佈它!)。

+0

感謝您的回覆。它解決了我的問題。抱歉缺少錯誤代碼,下次我會更加小心。再次感謝。 – Jepessen

相關問題