0

我正在尝试制作一个播放 .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 中明确传递文件路径时,代码可以工作;即,返回一个有效的句柄。有人可以解释为什么会这样吗?

4

1 回答 1

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

最后一个演员在这里没有做任何真实的事情,所以应该足够了。

于 2012-03-29T08:10:04.130 回答