首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

fopen函数打开.wav波形文件遇到的有关问题(绝对路径)

2012-03-27 
fopen函数打开.wav波形文件遇到的问题(绝对路径)首先,通过函数OnOpenWave()打开wmv音频文件,获取音频文件

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的时候截断了

热点排行