我定义了一些结构来保存Wave文件头
typedef struct
{
TCHAR szRiff[4];
DWORD dwRiffSize;
TCHAR szWave[4];
}RIFF;typedef struct 
{
WORD wFormatTag;          
        WORD nChannels;           
DWORD nSamplesPerSec;    
        DWORD nAvgBytesPerSec;    
WORD nBlockAlign;        
        WORD wBitsPerSample;      
}WAVEFORM;typedef struct
{
TCHAR szFmt[4];
DWORD dwFmtSize;
WAVEFORM WaveForm;
}RFT;typedef struct
{
TCHAR szData[4];
DWORD dwDataSize;
}DATA;然后在写头数据的时候
用以下方法
RIFF riff={0};
riff.dwRiffSize =dwLen+sizeof(WAVEHDR)-8;   //这里如果不这样安排顺序,则会把dwRiffSize的数据写到szRiff的后面,出问题
lstrcpy(riff.szRiff,_T("RIFF"));            //这里有堆栈错误
lstrcpy(riff.szWave,_T("WAVE"));         RFT rft={0};
lstrcpy(rft.szFmt,_T("fmt"));
rft.dwFmtSize =16;
rft.WaveForm.wFormatTag =WAVE_FORMAT_PCM;
rft.WaveForm.nChannels =1;
rft.WaveForm.nSamplesPerSec =11025;
rft.WaveForm.nAvgBytesPerSec    =11025;
rft.WaveForm.nBlockAlign =1;
rft.WaveForm.wBitsPerSample =8; DATA data={0};
data.dwDataSize=dwLen;
lstrcpy(data.szData,_T("data"));
DWORD dwSize;
WriteFile(hFile,&riff,sizeof(RIFF),&dwSize,NULL);
WriteFile(hFile,&rft,sizeof(RFT),&dwSize,NULL);
WriteFile(hFile,&data,sizeof(DATA),&dwSize,NULL);
WriteFile(hFile,pBuf,dwLen,&dwSize,NULL);
然后我打开所保存的Wave文件,出错。
接着我用UltraEdit打开,比较了下和普通的Wave数据,发现都差不多,怎么会错误呢?
谁有相关的资料啊或者指点下

解决方案 »

  1.   

    lstrcpy(riff.szRiff,_T("RIFF"));            //这里有堆栈错误 
    lstrcpy(riff.szWave,_T("WAVE"));         
    不能使用这个函数,它会在最后加一个'\0',把下面的一个字节给改写了.
    你检查一下你的文件表示长度的字段是否被改成0
      

  2.   

    为什么不用mmio相关的API去处理呢?
      

  3.   

    我希望自己也能保存wave文件
    有什么办法解决那个堆栈吗?
      

  4.   

    1. 把strcpy改为strncpy(riff.szRiff, "RIFF", sizeof(riff.szRiff));
    2. 一个一个字符赋值
      

  5.   

    memset不行,它是把内存设置为固定值