首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MCISendCommand找不到文件,但是Fstream可以,所以我知道它存在,为什么?

MCISendCommand找不到文件,但是Fstream可以,所以我知道它存在,为什么?
EN

Stack Overflow用户
提问于 2014-12-30 05:15:33
回答 1查看 156关注 0票数 0

我正在尝试使用MCISendCommand播放midi文件,但我一直收到DWORD275错误代码(找不到文件)。此后,我将相关代码放入了一个fstream open调用中,该调用确实会找到该文件。然后,我关闭该文件以允许MCISendCommand代码访问它,但它仍然找不到该文件。

相关代码如下:

代码语言:javascript
复制
fstream f;
f.open(szMIDIFileName);
if(f.is_open())
    // Then the file exists
{
    f.close();
  // See if the MIDI player needs to be opened
  if (m_uiMIDIPlayerID == 0)
  {
    // Open the MIDI player by specifying the device and filename
    MCI_OPEN_PARMS mciOpenParms;
    mciOpenParms.lpstrDeviceType = "sequencer";
    mciOpenParms.lpstrElementName = szMIDIFileName; //The name of the file passed in as a param
    if (mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,
      (DWORD_PTR)&mciOpenParms) == 0)
      // Get the ID for the MIDI player
      m_uiMIDIPlayerID = mciOpenParms.wDeviceID;
    else
      // There was a problem, so just return
     // This is where I keep ending up in my code with DWORD error 275
      return;
  }
}

我还应该提到的是,这段代码在我的教材“游戏编程入门”中的一个示例项目中工作。据我所知,所有项目属性都是相同的。然而,由于某种原因,代码在我自己的项目中不能工作,尽管我已经从示例项目中复制/粘贴了每一行代码(没有那么多,3/5个小类)。

EN

回答 1

Stack Overflow用户

发布于 2015-02-10 05:33:29

有两件事你可能想试试:

来自msdn remarks

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

换句话说,让系统为您选择设备类型,而不是将其设置为"Sequencer“。

  1. 另一件事你可以试试--有些API不喜欢路径中的空格。因此,您可能想要尝试此理论,将媒体文件移动到C:\,并删除文件名中可能包含的所有(可能)空格,看看是否就是这样。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27696127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档