描述:
就是MS 的TTS,怎么在DLL中使用老是出错呢?程序运行总是说XXXX内存地址处不能为写。
DLL中的代码:
extern "C" _declspec(dllexport) BOOL SpeakText(WCHAR * strSpeak)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
ISpVoice * pVoice = NULL;
if (FAILED(CoInitialize(NULL)))
{
MessageBox(NULL,"初始化错误","错误",MB_OK|MB_ICONERROR);
return FALSE;
}
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if( SUCCEEDED( hr ) )
{
hr = pVoice->Speak(strSpeak,0,NULL);
pVoice->Release();
pVoice = NULL;
}
CoUninitialize();
return TRUE;
}
解决方案1:
我做的只用pVoice->Speak("good luck");调用成功,但我的不是在DLL中。
解决方案2: 代码没错。
tts 就是 text to speech。
BOOL SpeakText(WCHAR * strSpeak)
....
hr = pVoice->Speak(strSpeak,0,NULL);
先试验如下代码看看
_bstr_t t;
t=strSpeak;
hr = pVoice->Speak(t,0,NULL);
或者
BSTR t;
t=SysAllocString(strSpeak);
hr = pVoice->Speak(t,0,NULL);
SysStringFree(t);
看来看去,只有这里能出错
hr = pVoice->Speak(strSpeak,0,NULL);
不过我不知道tts是什么
老兄能不能解释一下