读书人

fopen函数打开.wav波形文件遇到的有关

发布时间: 2012-03-27 13:44:24 作者: rapoo

fopen函数打开.wav波形文件遇到的问题(绝对路径)
首先,通过函数OnOpenWave()打开wmv音频文件,获取音频文件的信息,其中m_strname是定义在类头文件中的CString变量,用以保存打开wmv文件的路径和名称。部分代码如下所示:
void CWavetest1Dlg::OnOpenWave()
{
CString Filter;
char buf[128];
DWORD dwFlag;
Filter="波形音频文件(*.wav)|*.WAV||";
CFileDialog fileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,Filter);
if(fileDlg.DoModal()==IDOK)
{
m_strname=fileDlg.GetPathName();
dwFlag=m_MyMCIWave.OpenWave(m_strname);
if(dwFlag)
{
mciGetErrorString(dwFlag,buf,strlen(buf));
AfxMessageBox(buf);
}
GetDlgItem(IDC_PLAYWAV)->EnableWindow(TRUE);
......
......
......


然后,在另外一个函数中将m_strname变量准换成char类型的数组变量ch0[100]中,ch1[100]是用以调试的变量,保存的路径值与打开的音频文件相同;ch0和ch1都是作为参数供函数wavread(char *filename)调用,相关代买如下:
.....
char *pStr = (LPSTR)(LPCTSTR)m_strname; //转换为字符数组
char ch0[100];
strcpy(ch0, pStr);
char ch1[100]={"D:\\wavetest1\\111.wav"};
lpdata=wavread(ch0);
// lpdata=wavread(ch1);
........
wavread(char *filename)函数是对音频文件进行处理的函数,其首先要完成的任务即通过fopen()函数打开filename传入的路径地址对应的音频文件,供后续算法使用。其相关代买如下:
struct VOICE_STRU *wavread(char *filename)
{
FILE *fp;
fp=fopen(filename,"rb+");
if(NULL==fp){
perror(filename);
}
else{
.........
.........
现在遇到的问题是,单步调试时,当传入的变量是ch0时,调用fopen()返回值fp是null;当传入的变量是ch1时,调用fopen()返回值有效。调试过程中,ch0和ch1显示的调试值都是"D:\\wavetest1\\111.wav"。不知道问题出在什么地方了,求大虾帮忙,谢谢了!

[解决办法]
char *pStr=m_strname.GetBuffer(0);
这么做试试
至于你出的问题俺也不清楚
[解决办法]
m_strname定义为CStringA试试看 或者是不用UNICODE
估计是UNICODE在当ANSI的时候截断了

读书人网 >VC/MFC

热点推荐