MCI_OPEN терпит неудачу для файлов mp3 в консольном приложении C ++ - PullRequest
4 голосов
/ 19 августа 2011

Это то, что я сделал:

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»;это не помоглоВ любом случае, где эти вещи задокументированы?

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Если вы указываете MCI_OPEN_ELEMENT, то mciOpenParms.lpstrDeviceType должен быть нулевым.

См. Раздел Замечания .

* Чтобы использовать автоматический выбор типа (с помощью записей в реестре), присвойте имя файла и расширение файла члену lpstrElementName элементаструктура, идентифицируемая lpOpen, установите для элемента lpstrDeviceType значение NULL и установите флаг MCI_OPEN_ELEMENT. *

1 голос
/ 22 августа 2011

Это работает для меня. Может быть (вероятно) у вас все проблемы с регистром MCI. Или, может быть, файл, который вы открываете, как-то поврежден.

Насколько я знаю, эти имена устройств нигде не документированы. Но вы можете найти те, которые настроены в вашей системе в реестре: HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ MCI32 . Моя система имеет:

  • AVIVideo
  • Cdaudio
  • MPEGVideo
  • секвенсор
  • WaveAudio

И учитывая, что в настоящее время MCI используется не очень часто, я бы сказал, что они довольно стандартны.

...