我想做一个播放器,大致过程如下:
新建一个基于对话框的mfc应用程序,在右击工具栏-》选择项-》com组件-》Windows Media Player,这样添加了播放器控件,加了一堆按钮,然后右键项目-》添加类-》ActiveX中的MFC类,这之后有两个选项:1,注册表,2,文件。我在注册表里没找到Media Player,在文件选项里找到了c:\windows\system32\msdxm.tlb,然后成功的添加了Windows Media Player类,然后添加“打开”按钮事件响应: 
char szFileFilter[]= 
        "All File(*.*)|*.*||" 
        "Mp3 File(*.mp3)|*.mp3|" 
        "Wma File(*.wma)|*.wma|"         
        "Video File(*.dat)|*.dat|" 
        "Wave File(*.wav)|*.wav|" 
        "AVI File(*.avi)|*.avi|" 
        "Movie File(*.mov)|*.mov|" 
        "Media File(*.mmm)|*.mmm|" 
        "Mid File(*.mid;*,rmi)|*.mid;*.rmi|" 
        "MPEG File(*.mpeg)|*.mpeg|"; 
    CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); 
    if(dlg.DoModal()==IDOK) 
    { 
        CString PathName=dlg.GetPathName(); 
        PathName.MakeUpper(); 
        m_MediaPlayer.Open(PathName); 
    } 
编译执行,单击打开,选择了一个wna文件确定后出现错误: 
debug assertion failed 
 
程序停止在    ASSERT(m_pCtrlSite != NULL);    // not an OLE control (not yet, at least) 
 
把项目的属性debug改为release后,选择一个wma文件后程序没有反应 
 
不知道要在程序中调用Media Player需要做些什么,还有: 
 
1,我已经在命令行里面输入RegSvr32 C:\windows\system32\msdxm.ocx,并且提示已经成功,为什么在添加类时的注册表选项里找不到Windows Media Player呢? 
 
2,我在C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin目录下执行aximp c:\windows\system32\msdxm.ocx时提示错误:加载类型库/dll时出错,(异常来自异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY ) 
 
这些天一直都在搞播放器,也一直都没搞明白,希望大牛帮忙解答疑惑,不甚感激!谢谢!

解决方案 »

  1.   

    右键点下 插入ActiveX控件 选到WMP 然后你为播放器添加一个成员 有一堆自动生成的包装类 用那个成员变量来做事就可以
      

  2.   

    在你工程的资源中打开对话框,然后右键-》插入ActiveX控件,选择Media Player,生成对应的控件类,然后定义media player控件对象,就可以调用它了
      

  3.   

    我已经加入控件了,控件显示的位置是:c:\windows\system32\wmp.dll,另外我不知道您说的添加成员是不是,右键控件-》添加变量,但是添加变量后确实是生成了一个类,但是里面没有成员函数,不知道怎么调用了
      

  4.   

    不太确定您说的生成相应的控件类是什么,我是右键项目-》添加类,ActiveX中的MFC类,这之后有两个选项:1,注册表,2,文件。我在注册表里没找到Media Player,在文件选项里找到了c:\windows\system32\msdxm.tlb,然后成功的添加了Windows Media Player类。还有在文件选项里也可以找到:c:\windows\system32\wmp.dll,显示的也是Windows Media Player,但是无法生成类,提示的错误是:cannot find coclass for interfacd ***(**代表接口,那里面显示了好多接口,都不能生成类)还是很迷惑啊,希望大牛更详细点解答!我的问题描述很详细,希望大家多看看!谢谢!
      

  5.   

    在文件选项里找到了c:\windows\system32\msdxm.tlb 这个时候,就可以选择添加一些类,会帮你自动生成对应的h文件等,里面有函数等
      

  6.   

    谢谢你的回答,我是那你说的找到了c:\windows\system32\msdxm.tlb,它显示的接口有四个:_MediaPlayerEvents,IMediaPlayer,IMediaPlayer,IMediaPlayer2,IMediaPlayerDvd.我只选择了IMediaPlayer那一个接口,生成了CMediaPlayer类,并生成了一个实例m_MediaPlayer,出的那个错误(Debug assert)就是在调用m_MediaPlayer.open()时出的错误,希望大牛继续帮忙解答,谢谢!
      

  7.   

    m_MediaPlayer 绑定对话框的media player控件
      

  8.   

    如何绑定呢,我在对话框的 .h文件里这么实现的: CMediaPlayer m_MediaPlayer;
    这样是不是绑定呢?
    谢谢你!麻烦你继续解答一下
      

  9.   

    谢谢大牛,
    void CMediaPlayer_douDlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_OCX1, m_MediaPlayer);
    }我在上面的函数里面加上了第二句之后,就没有提示那个错误了,但是运行程序时,打开一个wma文件后,弹出一个对话框说:找不到文件我现在确定,传递的路径是没错的,
    选择路径对话框里的一段:
    if(dlg.DoModal()==IDOK)
    {
    CString PathName=dlg.GetPathName();
    PathName.MakeUpper();
    m_MediaPlayer.Open(PathName);
    }ps:这个应该不是我的第一个问题了,所以我把帖子结了,现在的问题我会自己去探索一下,但我还是希望大牛能帮我解答一下,谢谢!