.wav播放器:mmioOpen API

时间:2012-03-29 07:19:41

标签: c++ mfc mci

我正在尝试制作播放.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。令我感到困惑的是,当我在mmioOpen API中显式传递文件路径时代码正常工作;即,返回有效句柄。 有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

当你说

时会发生什么
MessageBox(NULL,(LPTSTR)&szFilename,"Foo",MB_ICONINFORMATION);

将字符串传递给系统函数时,您需要获取指向原始字符串的指针。例如,如果要使用std :: string对象来构建路径,则需要说

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

您的演员假设从CString *到LPTSTR假定CString与LPTSRT二进制兼容,但事实并非如此。当您在szFilename上编写LPCTSTR时,您将调用在CStrings上定义的强制转换运算符,并将其转换为适当的格式。你尝试过吗

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

最后一次演员在这里没有做任何事情所以它应该足够了。