MCISendCommand无法找到文件,但Fstream可以这样我知道它存在,为什么?

时间:2014-12-29 21:15:33

标签: file-not-found mci

我尝试使用MCISendCommand播放midi文件,但我一直收到DWORD错误代码275(找不到文件)。我已经将相关代码放在fstream打开调用中,该调用找到了该文件。然后我关闭文件以允许MCISendCommand代码访问它,但它仍然无法找到该文件。

以下是相关代码:

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;
  }
}

我还应该提一下,这段代码适用于我的教科书中的示例项目" Beginning Game Programming"迈克尔莫里森。据我所知,所有项目属性都是相同的。但是,出于某种原因,代码在我自己的项目中对我不起作用,即使我已经从示例项目中复制/粘贴了每一行代码(没有那么多,3/5小类)。

1 个答案:

答案 0 :(得分:0)

您可能想尝试两件事:

    来自msdn remarks
  1.   

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

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

    1. 您可以尝试的另一件事 - 某些API不喜欢路径中的空格。因此,您可能希望通过将媒体文件移动到C:\来尝试此理论,并删除文件名中可能包含的所有(可能)空格,并查看是否就是这样。