【问题标题】:MCI_OPEN fails for mp3 files in a C++ console applicationC++ 控制台应用程序中 mp3 文件的 MCI_OPEN 失败
【发布时间】:2011-10-30 17:23:10
【问题描述】:

这就是我所做的:

DWORD dwReturn;
MCI_OPEN_PARMS mciOpenParms;
mciOpenParms.lpstrDeviceType = _T("MPEGvideo");
mciOpenParms.lpstrElementName = m_tmpFileName;

dwReturn = mciSendCommand(NULL, MCI_OPEN,
                  MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,
                 (DWORD)(LPVOID) &mciOpenParms);
    if (dwReturn)
    {
        wchar_t chError[100];
        mciGetErrorString(dwReturn,chError,sizeof(chError));
        //report the error here
    }

当我运行代码时,我看到 dwReturn 为 266,并且 chError 设置为“加载指定设备驱动程序时出现未知问题”。有什么问题?

注意:我也试过“mpegvideo”而不是“MPEGvideo”;它没有帮助。这些东西到底记录在哪里?

【问题讨论】:

    标签: c++ winapi mp3 console-application mci


    【解决方案1】:

    它对我有用。也许(很可能)你把 MCI 寄存器搞砸了。或者您打开的文件可能已损坏。

    据我所知,这些设备名称没有记录在任何地方。但是您可以在注册表中找到系统中配置的那些:HKLM\Software\Microsoft\Windows NT\CurrentVersion\MCI32。我的系统有:

    • AVI视频
    • CDAudio
    • MPEG视频
    • 音序器
    • WaveAudio

    鉴于现在 MCI 的使用不多,我会说它们是相当标准的。

    【讨论】:

    • 实际上,该文件在 Windows Media Player 中可以正常播放,即使是经典版本。
    • 如果有帮助,还有其他人报告同样的问题:google.co.in/…
    • 我想说这可能取决于您在机器中安装的编解码器。您可以发布我引用的注册表项的内容吗?
    • 我还注意到这个项目确实可以在我的系统上运行:codeproject.com/KB/audio-video/…。这是一个 C# 项目,但使用 mciSendString()(我使用 mciSendCommand())。
    • 我想看到的是这些注册表项的内容。您与 winmm.lib 链接,不是吗?我不认为你会弄错。
    【解决方案2】:

    如果您指定 MCI_OPEN_ELEMENT,则 mciOpenParms.lpstrDeviceType 必须为空。

    请参阅Remarks section

    *要使用自动类型选择(通过注册表中的条目),请将文件名和文件扩展名分配给由 lpOpen 标识的结构的 lpstrElementName 成员,将 lpstrDeviceType 成员设置为 NULL,并设置 MCI_OPEN_ELEMENT 标志。*

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多