.wav Player: mmioOpen API - PullRequest
       20

.wav Player: mmioOpen API

0 голосов
/ 29 марта 2012

Я пытаюсь создать аудиоплеер, который воспроизводит файлы .wav. Я написал функцию ReadWaveFile (CString szFilename) для чтения волновых данных файла в структуру WAVEHDR. В этой функции

BOOL CWavePlay::ReadWaveFile(CString szFilename)
{
    hmmio = mmioOpen((LPTSTR)&szFilename,NULL,MMIO_READ);
    ASSERT(hmmio);      //error here: hmmio=0x00000000
    if(hmmio==0)
        return FALSE;
        ....
}

mmioOpen всегда возвращает 0 всякий раз, когда я передаю путь к файлу этой функции для открытия указанного файла. И что сбивает с толку, так это когда я передаю filepath явно в mmioOpen API, код работает; то есть верный дескриптор возвращается. Может ли какое-то тело объяснить, почему это происходит?

1 Ответ

0 голосов
/ 29 марта 2012

Что произойдет, когда вы скажете

MessageBox(NULL,(LPTSTR)&szFilename,"Foo",MB_ICONINFORMATION);

При передаче строк системным функциям вам потребуется подобрать указатель на необработанную строку.Например, если вы хотите использовать объект std :: string для построения вашего пути, вам нужно будет сказать

mmioOpen(filename.c_str(),NULL,MMIO_READ);

Ваше приведение предполагает, что из CString * в LPTSTR предполагается, что CString двоично совместима с LPTSRT.что не так.Когда вы пишете LPCTSTR для szFilename, вы вызываете оператор приведения, определенный в CStrings, который преобразует его в соответствующий формат.Вы пробовали только

hmmio = mmioOpen((LPCTSTR)szFilename,NULL,MMIO_READ);

Последнее приведение здесь ничего не дает, поэтому этого должно быть достаточно.

...