SAPI中SetOutput调用问题

测试230 2013-12-05 11:14:16
SAPI的C接口调用。

代码如下

ISpStream *pWavStream;
ISpVoice *pVoice;
CoInitialize(NULL);
if( S_OK != CoCreateInstance(&CLSID_SpVoice,
NULL,
CLSCTX_ALL,
&IID_ISpVoice,
(void **)&pVoice)

)
{
apt_log(APT_LOG_MARK, APT_PRIO_DEBUG, "pVoice init failed");
}

if( S_OK != CoCreateInstance(&CLSID_SpStream,
NULL,
CLSCTX_ALL,
&IID_ISpStream,
(void **)&pWavStream)

)
{
apt_log(APT_LOG_MARK, APT_PRIO_DEBUG, "pWavStream init failed");
}

hr =pVoice->lpVtbl->SetOutput(pVoice,pWavStream,TRUE);



SetOutput调用的返回码是0x80045001。
找不到对应的错误原因,这样调用有问题吗?
pWavStream这个参数用法是否正确?
...全文
110 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
测试230 2013-12-12
  • 打赏
  • 举报
回复
好吧,C的接口实在没有调通,只有封了一层,改用C++调用了
图灵狗 2013-12-05
  • 打赏
  • 举报
回复
直接从MSDN上查找答案吧,参考http://msdn.microsoft.com/en-us/library/ms720410(v=vs.85).aspx
引用 楼主 tnt230 的回复:
SAPI的C接口调用。 代码如下

ISpStream *pWavStream;
ISpVoice *pVoice;
CoInitialize(NULL);
if(  S_OK != CoCreateInstance(&CLSID_SpVoice, 
					NULL, 
					CLSCTX_ALL, 
					&IID_ISpVoice,	
					(void **)&pVoice)
					
	)
{
	apt_log(APT_LOG_MARK, APT_PRIO_DEBUG, "pVoice init failed");				
}

if( S_OK != CoCreateInstance(&CLSID_SpStream, 
					NULL, 
					CLSCTX_ALL, 
					&IID_ISpStream,	
					(void **)&pWavStream)
					
	)
{
    apt_log(APT_LOG_MARK, APT_PRIO_DEBUG, "pWavStream init failed");	
}

hr =pVoice->lpVtbl->SetOutput(pVoice,pWavStream,TRUE);

SetOutput调用的返回码是0x80045001。 找不到对应的错误原因,这样调用有问题吗? pWavStream这个参数用法是否正确?
测试230 2013-12-05
  • 打赏
  • 举报
回复
引用 1 楼 turingo 的回复:
直接从MSDN上查找答案吧,参考http://msdn.microsoft.com/en-us/library/ms720410(v=vs.85).aspx [quote=引用 楼主 tnt230 的回复:] SAPI的C接口调用。 代码如下

ISpStream *pWavStream;
ISpVoice *pVoice;
CoInitialize(NULL);
if(  S_OK != CoCreateInstance(&CLSID_SpVoice, 
					NULL, 
					CLSCTX_ALL, 
					&IID_ISpVoice,	
					(void **)&pVoice)
					
	)
{
	apt_log(APT_LOG_MARK, APT_PRIO_DEBUG, "pVoice init failed");				
}

if( S_OK != CoCreateInstance(&CLSID_SpStream, 
					NULL, 
					CLSCTX_ALL, 
					&IID_ISpStream,	
					(void **)&pWavStream)
					
	)
{
    apt_log(APT_LOG_MARK, APT_PRIO_DEBUG, "pWavStream init failed");	
}



hr =pVoice->lpVtbl->SetOutput(pVoice,pWavStream,TRUE);

SetOutput调用的返回码是0x80045001。 找不到对应的错误原因,这样调用有问题吗? pWavStream这个参数用法是否正确?
[/quote] 不明白为什么,C++的版本调用时OK的,但用C接口调用不行。 我只是想重新定位音频流到内存而已

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧