2012-03-29 1 views
0

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

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, код работает; то есть возвращаемый действительный дескриптор. Может кто-нибудь объяснить, почему это происходит ???

+0

проблема решена, когда я написали код как: hmmio = mmioOpen ((LPTSTR) (LPCTSTR) szFilename, NULL, MMIO_READ); – ckram

ответ

0

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

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

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

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

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

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

Последний актер не делает ничего настоящего, так что этого должно быть достаточно.