2016-11-23 3 views
-2

私はMSDNのこのコードを使ってテキストをスピーチに変更しました。チュートリアルのすべてのチュートリアルを実行しましたが、コードはエラーなしで動作しますが、コードを実行すると、 2秒後にコードを読まずにメインコードに戻ります。私の質問はここに何が問題なのですか?プログラムが2秒未満で実行される

これはコードです:CoCreateInstance()

#include "stdafx.h" 
#include <sapi.h> 
#include <initguid.h> 

int main(int argc, char* argv[]) 
{ 
    ISpVoice * pVoice = NULL; 
    if (FAILED(::CoInitialize(NULL))) 
     return FALSE; 

    HRESULT hr = CoCreateInstance(__uuidof(SpVoice), NULL, CLSCTX_ALL, __uuidof(SpVoice), (void **)&pVoice); 
    if(SUCCEEDED(hr)) 
    { 
     hr = pVoice->Speak(L"Hello world", 0, NULL); 
     hr = pVoice->Speak(L"This sounds normal <pitch middle = '-10'/> but the pitch drops half way through", SPF_IS_XML, NULL); 
     pVoice->Release(); 
     pVoice = NULL; 
    } 
    ::CoUninitialize(); 
    return TRUE; 
} 
+0

は、ブレークポイントを設定し、一般的にデバッグを試してみてください。たとえば、そのコードに '!SUCCEEDED(hr)'と表示されることはありません。 – Ryan

+2

デバッグを試しましたか? –

+0

私はブレークポイントを試して、まだ動作していません。私はこのコールCoCreateInstance(CLSID_SpVoice、NULL、CLSCTX_ALL、IID_ISpVoice、(void **)&pVoice)を使用したときにSUCCEEDED(hr)をif(!SUCCEEDED(hr))に変更し、まだ何も – Marco

答えて

2

あなたの呼び出しが間違っています。代わりにISpVoiceインターフェイスのIIDが期待されるSpVoice CoClassのCLSIDを渡しています(したがって、E_NOINTERFACEエラーで失敗するはずです)。

代わりにこれを試してみてください。また

CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice); 

CoCreateInstance(__uuidof(SpVoice), NULL, CLSCTX_ALL, IID_PPV_ARGS(&pVoice)); 
+0

に変更しました。 は、私はこれらのエラーを取得する:エラーエラーLNK1120:2つの未解決の外部と、このエラーエラー\t 1つの\tエラーLNK2001:未解決の外部シンボル_CLSID_SpVoice、およびこのエラーはまたエラーLNK2001エラー:未解決の外部シンボル_IID_ISpVoiceを。だから私はこの呼び出しCoCreateInstance(__ uuidof(SpVoice)、NULL、CLSCTX_ALL、__uuidof(SpVoice)、(void **)&pVoice)の呼び出しを変更します。 – Marco

+0

外部シンボルを解決するには、 'sapilib.lib'にリンクしていることを確認してください。代わりに '__uuidof()'を使用すると、2番目の '__uuidof()'は '__uuidof(SpVoice)'ではなく '__uuidof(ISpVoice)'でなければなりません( 'IID_PPV_ARGS()'がそれを処理します)。 'SpVoice'はCoClass、' ISpVoice'はインターフェースです。 –

関連する問題