.wav Player: mmioOpen API

Я пытаюсь сделать аудио плеер, который воспроизводит файлы.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 ответ

Что будет когда ты скажешь

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

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

Другие вопросы по тегам