6382|16

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

100分求put_Owner()出错问题! [复制链接]

这是我的源代码:
void CNewAviTestDlg::OnButton1()     
{   
// TODO: Add your control notification handler code here   
IGraphBuilder   *m_pGraph;      
    IMediaControl   *m_pControl;      
    IMediaEventEx     *m_pEvent;      
IVideoWindow  *m_pVideoWindow;   
    CoInitialize(NULL);      

//hWnd = GetDlgItem(IDC_STATIC_MPEG)->m_hWnd;  IDC_STATIC_MPEG是我的一个PictureBox控件的ID,我一开始是想用这个PictureBox控件作为播放avi窗口的,也是碰到同样的问题
HWND   hWnd =   GetSafeHwnd(); //所以现在我想把当前活动窗口作为播放窗口,也碰到了同样的问题。   

HRESULT hr;     

    //free(); //Deletes any previous DirectShow instances     
    hr = CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pGraph);     
    if (!SUCCEEDED(hr))     
{     
MessageBox(_T("CoCreateInstance failed"));     
}     
    hr = m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pControl);     
    if (!SUCCEEDED(hr))     
{     
MessageBox(_T("IID_IMediaControl failed"));     
}     
    hr = m_pGraph->QueryInterface(IID_IMediaEventEx, (void **)&m_pEvent);     
    if (!SUCCEEDED(hr))     
{     
MessageBox(_T("IID_IMediaEventEx failed"));      
}     

    hr = m_pEvent->SetNotifyWindow((OAHWND)hWnd, 0, 0);     
    if (!SUCCEEDED(hr))     
{     
MessageBox(_T("SetNotifyWindow  failed"));     
}     


    hr = m_pGraph->RenderFile(L"C\\爱我别走.avi", NULL);     
    if (!SUCCEEDED(hr))     
{     
MessageBox(_T("RenderFile  failed"));     
        //m_pMediaPlayerLog->WriteOut("RenderFile  failed,RESULT:0x%x",hr);     
}     
    hr = m_pGraph->QueryInterface(IID_IVideoWindow, (LPVOID *) &m_pVideoWindow);     
    if (!SUCCEEDED(hr))     
{     
MessageBox(_T("IID_IVideoWindow  failed"));     
    }     

SetWindowLong(hWnd,GWL_STYLE,GetWindowStyle(hWnd)  ?WS_CLIPCHILDREN);   
    hr = pVidWin->put_Owner((OAHWND)hWnd);   
    CString strError;   
    if (!SUCCEEDED(hr))   
     {   
       strError.Format(_T("put_Owner出错:%x"),hr);   //这里开始报错!!!
       MessageBox(strError);   
       strError.Format(_T("put_Owner出错:%d"),hr);   
       MessageBox(strError);   
       strError.Format(hr);   
       MessageBox(strError);   
     }   
    hr = m_pVideoWindow->put_WindowStyle(WS_CHILD   ?WS_CLIPCHILDREN   ?WS_CLIPSIBLINGS); //然后这里也会报错 ,失败了   
     if (!SUCCEEDED(hr))     
{     
MessageBox(_T("put_WindowStyle  failed"));   
         //m_pMediaPlayerLog->WriteOut("put_WindowStyle  failed,RESULT:0x%x",hr);     
}     
     hr = m_pVideoWindow->put_MessageDrain((OAHWND)hWnd);//然后这里也会报错 ,失败了   
     if (!SUCCEEDED(hr))     
{     
MessageBox(_T("put_MessageDrain  failed"));   
     //m_pMediaPlayerLog->WriteOut("put_MessageDrain  failed,RESULT:0x%x",hr);     
}     
     hr = m_pVideoWindow->put_Visible(OATRUE); //最后是这里也会报错 ,失败了   
     if (!SUCCEEDED(hr))     
{     
MessageBox(_T("put_Visible  failed"));   
     //m_pMediaPlayerLog->WriteOut("put_Visible  failed,RESULT:0x%x",hr);     
}     

     RECT grc;     
     GetClientRect(&grc);     
     m_pVideoWindow->SetWindowPosition(289,81,704,585);     
     m_pVideoWindow->put_Visible(OATRUE);     

m_pControl->Run();     

}   
察看输出结果:  
第一个对话框显示:put_Owner出错:80004002  
第二个对话框显示:put_Owner出错:-2147467262  
第三个对话框是空白  
然后依次就出现下面三个对话框:
  put_WindowStyle出错: 6  
put_MessageDrain出错:6  
  put_Visible出错: 6  


我想创建一个视频窗口,播放avi。谁能告诉我put_Owner()里面的参数应该怎么得到才不会出现那样的错误阿?谢谢大家!  
我已经被这个问题困扰了3个星期了,有的人说这段代码在他的板子上是不会出现这些问题的,可是在我的板子上只听到几声“咔”的声音,没有图像。这是为什么啊?
该加的头文件
#include   
#include

#pragma comment (lib,"Ole32.lib")
#pragma comment (lib,"Strmiids.lib")
我也都已经加了,可还是不明白为什么会出现那样的问题。
希望哪位高人能指点一下,视频窗口到底应该怎么创建。就算出200分我也愿意!!!谢谢!!!

最新回复

我也遇到这个问题,好像是directshow 里面的什么东西没注册。。  详情 回复 发表于 2009-5-26 17:11
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我也遇到了这个问题,put_Owner老是出错,不知道为什么,怪怪的!
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
晕啊!为什么还是没有人能帮我?急啊!!!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
参考下WINDOWS下的DIRECTX SDK开发包,说不定要相似的例子程序。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

5
 
之前我有在X86平台下做过一个播放器,播放MPEG格式的视频,我的播放窗口就是一个Static Text,不知道LZ有没用这个试过
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
To qfeng168:
   谢谢!不用了。因为我的程序MPEG和wmv格式的视频都可以播放的,播放窗口也是一个Static Text,但是avi就是不行!现在mp3格式的视频文件还没有试过。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

7
 
你的代码我在VC++6。0下测试,在RenderFile( )处就不成功,还有不识别标识符pVidWin,这个没有定义?你自己有没多方面测试一下。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
AVI不行?估计时视频解码出了问题,比较下AVI与MPEG之间的差异看看
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
怎么比较AVI与MPEG之间的差异,能举个例子说明一下吗?谢谢大侠!
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

10
 
我觉得还是应该追踪程序,看提取帧图像的时候有没成功。然后看进行CDC拷贝/FLIP的时候有没成功。因为显示图像其实就是显示一幅幅的画面,只是显示的速度比较快,我们人眼看不出来而已。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

11
 
codec的问题吧,不能正确解码
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
To jlctt:那怎么才能解决codec的问题呢?谢谢!
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

13
 
只能去网上搜搜有没有现成的解码器了。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

14
 
好吧,知道了,谢谢各位了!
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

15
 
好吧,那就结贴吧。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

16
 
RenderFile( )之后调用put_Owner才会成功
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

17
 
我也遇到这个问题,好像是directshow 里面的什么东西没注册。。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表