|
|
发表于 2006-6-9 05:46:00
|
显示全部楼层
Re:Dshow里面播放mp3怎么设置循环播放?
收到你发来的代码,格式很规范,说明也很详细,呵呵,可惜我没时间帮你改了
粗略看了下,使用方式都正确,出现异常是因为pEvent指针是空值,你应该先初始化pEvent后再调用;另外,如果要用SetNotifyWindow的方法,需要的是IMediaEventEx接口,这个接口获取通过查询取得,例如:
m_pGraph->QueryInterface(IID_IMediaEventEx, (void **)&m_pEventEx);
要注意,,IMediaEventEx接口是从IMediaEvent派生下来的,也就说IMediaEventEx已经包含了IMediaEvent的所有公开方法,不用同时获取两个对象
case WM_GRAPHNOTIFY的处理也有点问题,参考这个例子:
case WM_GRAPH_NOTIFY:
{
long evCode, param1, param2;
while (SUCCEEDED(m_pEventEx->GetEvent(&evCode, &param1, &param2, 0)))
{
m_pEventEx->FreeEventParams(evCode, param1, param2);
switch (evCode)
{
case EC_COMPLETE: // Fall through.
case EC_USERABORT: // Fall through.
case EC_ERRORABORT:
ResetMusic();
}
}
break;
}
如果只使用GetEvent的方式就不需要消息窗口了,但最好把它放到一个独立的线程里跑,因为它跟GetMessage API一样,需要循环调用
另外,CoUninitialize函数用法不对,这函数不要经常调,放在程序最后或者析构调一次就够了
暂时只发现这些,文档MSDN里有,DX8的SDK也有(新版的9.0没有),包括一些例子,可以下载,多尝试一下就OK了 |
|