自己定义的WAVEdlg.cpp文件中的错误,报错误如下:
--------------------Configuration: MyVC10 - Win32 Debug--------------------
Compiling...
WAVEdlg.cpp
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(153) : error C2601: 'OnStop' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(169) : error C2601: 'DestroyWindow' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(175) : error C2601: 'OnInitDialog' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(188) : error C2601: 'Open' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(202) : error C2601: 'close' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(213) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.MyVC10.exe - 1 error(s), 0 warning(s)// WAVEdlg.cpp : implementation file
//#include "stdafx.h"
#include "MyVC10.h"
#include "WAVEdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CWAVEdlg dialog
CWAVEdlg::CWAVEdlg(CWnd* pParent /*=NULL*/)
: CDialog(CWAVEdlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CWAVEdlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CWAVEdlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWAVEdlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWAVEdlg, CDialog)
//{{AFX_MSG_MAP(CWAVEdlg)
ON_BN_CLICKED(IDC_OPEN, OnOpen)
ON_BN_CLICKED(IDC_PLAY, OnPlay)
ON_BN_CLICKED(IDC_RECORD, OnRecord)
ON_BN_CLICKED(IDC_SAVE, OnSave)
ON_BN_CLICKED(IDC_STOP, OnStop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CWAVEdlg message handlersvoid CWAVEdlg::OnOpen()
{
CString path,str;
CFileDialog filedlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,"(*.wav)|*.wav||");
if(filedlg.DoModal()==IDOK)
{
path=filedlg.GetPathName();
if(!Open(path))
{
MessageBox("不能打开文件!");
return;
}
CWnd*m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(TRUE);
}SetDlgItemText(IDC_FILENAME,path);
MCI_STATUS_PARMS statusparms;
statusparms.dwItem=MCI_WAVE_STATUS_SAMPLESPERSEC;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
(DWORD)(LPVOID)&statusparms);
str.Format("%5.3f",statusparms.dwReturn/1000.0);
str+="khz";
SetDlgItemText(IDC_SAMPLERATE,str);
str.Empty();
statusparms.dwItem=MCI_WAVE_STATUS_CHANNELS;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
(DWORD)(LPVOID)&statusparms);
if(statusparms.dwReturn==1) str="单声道";
else str="双声道";
SetDlgItemText(IDC_CHANNELS,str);
str.Empty();
statusparms.dwItem=MCI_WAVE_STATUS_BITSPERSAMPLE;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
(DWORD)(LPVOID)&statusparms);
str.Format("%d",statusparms.dwReturn);
str+="位";
SetDlgItemText(IDC_RESOLUTION,str);
str.Empty();
statusparms.dwItem=MCI_STATUS_LENGTH;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
(DWORD)(LPVOID)&statusparms);
str.Format("%d",int(statusparms.dwReturn/1000.0));
str+="秒";
SetDlgItemText(IDC_RESOLUTION,str);
}void CWAVEdlg::OnPlay()
{
OnStop();
MCI_PLAY_PARMS playparms;
mciSendCommand(m_wDeviceID,MCI_SEEK,MCI_SEEK_TO_START,NULL);
if(mciSendCommand(m_wDeviceID,MCI_PLAY,NULL,(DWORD)(LPVOID)&playparms))
MessageBox("播放失败!");
}void CWAVEdlg::OnRecord()
{
close();
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(FALSE);
m_pWnd=GetDlgItem(IDC_OPEN);
m_pWnd->EnableWindow(FALSE);
m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(FALSE);
MCI_OPEN_PARMS openparms;
openparms.lpstrDeviceType="waveaudio";
openparms.lpstrElementName="";
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_OPEN_TYPE|MCI_WAIT,
(DWORD)(LPVOID)&openparms);
m_wDeviceID=openparms.wDeviceID;
MCI_RECORD_PARMS recordparms;
mciSendCommand(m_wDeviceID,MCI_RECORD,NULL,(DWORD)(LPVOID)&recordparms);
m_bRecording=TRUE;
m_bOpened=TRUE;
}void CWAVEdlg::OnSave()
{
CFileDialog filedlg(FALSE,NULL,NULL,OFN_OVERWRITEPROMPT,"(*.wav)|*.wav|");
filedlg.m_ofn.lpstrDefExt="wav";
if(m_bRecording)
{
if(filedlg.DoModal()==IDOK)
{
CString path;
path=filedlg.GetPathName();
MCI_SAVE_PARMS saveparms;
saveparms.lpfilename=(LPCSTR)path;
if(mciSendCommand(m_wDeviceID,MCI_SAVE,MCI_SAVE_FILE|MCI_WAIT,
(DWORD)(LPVOID)&saveparms))
return;
m_bRecording=FALSE;
}
}void CWAVEdlg::OnStop()
{ //报错地方
mciSendCommand(m_wDeviceID,MCI_STOP,NULL,NULL);
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_OPEN);
m_pWnd->EnableWindow(TRUE);
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(TRUE);
if(m_bRecording)
{
m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(TRUE);
}
}BOOL CWAVEdlg::DestroyWindow()
{ //报错地方
close();
return CDialog::DestroyWindow();
}BOOL CWAVEdlg::OnInitDialog()
{ //报错地方
CDialog::OnInitDialog();
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(FALSE);
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(FALSE);
m_wDeviceID=0; m_bOpened=FALSE; m_bRecording=FALSE;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}BOOL CWAVEdlg::Open(CString filename)
{ //报错地方
close();
MCI_OPEN_PARMS openparms;
openparms.lpstrDeviceType="waveaudio";
openparms.lpstrElementName=filename;
if(mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_OPEN_TYPE,
(DWORD)(LPVOID)&openparms))
return FALSE;
m_wDeviceID=openparms.wDeviceID;
m_bOpened=TRUE;
return TRUE;
}void CWAVEdlg::close()
{ //报错地方
m_bRecording=FALSE;
m_bOpened=FALSE;
if(m_wDeviceID)
{
mciSendCommand(m_wDeviceID,MCI_STOP,MCI_WAIT,NULL);
mciSendCommand(m_wDeviceID,MCI_CLOSE,NULL,NULL);
}
m_wDeviceID=0;}
--------------------Configuration: MyVC10 - Win32 Debug--------------------
Compiling...
WAVEdlg.cpp
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(153) : error C2601: 'OnStop' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(169) : error C2601: 'DestroyWindow' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(175) : error C2601: 'OnInitDialog' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(188) : error C2601: 'Open' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(202) : error C2601: 'close' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(213) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.MyVC10.exe - 1 error(s), 0 warning(s)// WAVEdlg.cpp : implementation file
//#include "stdafx.h"
#include "MyVC10.h"
#include "WAVEdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CWAVEdlg dialog
CWAVEdlg::CWAVEdlg(CWnd* pParent /*=NULL*/)
: CDialog(CWAVEdlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CWAVEdlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CWAVEdlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWAVEdlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWAVEdlg, CDialog)
//{{AFX_MSG_MAP(CWAVEdlg)
ON_BN_CLICKED(IDC_OPEN, OnOpen)
ON_BN_CLICKED(IDC_PLAY, OnPlay)
ON_BN_CLICKED(IDC_RECORD, OnRecord)
ON_BN_CLICKED(IDC_SAVE, OnSave)
ON_BN_CLICKED(IDC_STOP, OnStop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CWAVEdlg message handlersvoid CWAVEdlg::OnOpen()
{
CString path,str;
CFileDialog filedlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,"(*.wav)|*.wav||");
if(filedlg.DoModal()==IDOK)
{
path=filedlg.GetPathName();
if(!Open(path))
{
MessageBox("不能打开文件!");
return;
}
CWnd*m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(TRUE);
}SetDlgItemText(IDC_FILENAME,path);
MCI_STATUS_PARMS statusparms;
statusparms.dwItem=MCI_WAVE_STATUS_SAMPLESPERSEC;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
(DWORD)(LPVOID)&statusparms);
str.Format("%5.3f",statusparms.dwReturn/1000.0);
str+="khz";
SetDlgItemText(IDC_SAMPLERATE,str);
str.Empty();
statusparms.dwItem=MCI_WAVE_STATUS_CHANNELS;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
(DWORD)(LPVOID)&statusparms);
if(statusparms.dwReturn==1) str="单声道";
else str="双声道";
SetDlgItemText(IDC_CHANNELS,str);
str.Empty();
statusparms.dwItem=MCI_WAVE_STATUS_BITSPERSAMPLE;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
(DWORD)(LPVOID)&statusparms);
str.Format("%d",statusparms.dwReturn);
str+="位";
SetDlgItemText(IDC_RESOLUTION,str);
str.Empty();
statusparms.dwItem=MCI_STATUS_LENGTH;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
(DWORD)(LPVOID)&statusparms);
str.Format("%d",int(statusparms.dwReturn/1000.0));
str+="秒";
SetDlgItemText(IDC_RESOLUTION,str);
}void CWAVEdlg::OnPlay()
{
OnStop();
MCI_PLAY_PARMS playparms;
mciSendCommand(m_wDeviceID,MCI_SEEK,MCI_SEEK_TO_START,NULL);
if(mciSendCommand(m_wDeviceID,MCI_PLAY,NULL,(DWORD)(LPVOID)&playparms))
MessageBox("播放失败!");
}void CWAVEdlg::OnRecord()
{
close();
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(FALSE);
m_pWnd=GetDlgItem(IDC_OPEN);
m_pWnd->EnableWindow(FALSE);
m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(FALSE);
MCI_OPEN_PARMS openparms;
openparms.lpstrDeviceType="waveaudio";
openparms.lpstrElementName="";
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_OPEN_TYPE|MCI_WAIT,
(DWORD)(LPVOID)&openparms);
m_wDeviceID=openparms.wDeviceID;
MCI_RECORD_PARMS recordparms;
mciSendCommand(m_wDeviceID,MCI_RECORD,NULL,(DWORD)(LPVOID)&recordparms);
m_bRecording=TRUE;
m_bOpened=TRUE;
}void CWAVEdlg::OnSave()
{
CFileDialog filedlg(FALSE,NULL,NULL,OFN_OVERWRITEPROMPT,"(*.wav)|*.wav|");
filedlg.m_ofn.lpstrDefExt="wav";
if(m_bRecording)
{
if(filedlg.DoModal()==IDOK)
{
CString path;
path=filedlg.GetPathName();
MCI_SAVE_PARMS saveparms;
saveparms.lpfilename=(LPCSTR)path;
if(mciSendCommand(m_wDeviceID,MCI_SAVE,MCI_SAVE_FILE|MCI_WAIT,
(DWORD)(LPVOID)&saveparms))
return;
m_bRecording=FALSE;
}
}void CWAVEdlg::OnStop()
{ //报错地方
mciSendCommand(m_wDeviceID,MCI_STOP,NULL,NULL);
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_OPEN);
m_pWnd->EnableWindow(TRUE);
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(TRUE);
if(m_bRecording)
{
m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(TRUE);
}
}BOOL CWAVEdlg::DestroyWindow()
{ //报错地方
close();
return CDialog::DestroyWindow();
}BOOL CWAVEdlg::OnInitDialog()
{ //报错地方
CDialog::OnInitDialog();
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(FALSE);
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(FALSE);
m_wDeviceID=0; m_bOpened=FALSE; m_bRecording=FALSE;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}BOOL CWAVEdlg::Open(CString filename)
{ //报错地方
close();
MCI_OPEN_PARMS openparms;
openparms.lpstrDeviceType="waveaudio";
openparms.lpstrElementName=filename;
if(mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_OPEN_TYPE,
(DWORD)(LPVOID)&openparms))
return FALSE;
m_wDeviceID=openparms.wDeviceID;
m_bOpened=TRUE;
return TRUE;
}void CWAVEdlg::close()
{ //报错地方
m_bRecording=FALSE;
m_bOpened=FALSE;
if(m_wDeviceID)
{
mciSendCommand(m_wDeviceID,MCI_STOP,MCI_WAIT,NULL);
mciSendCommand(m_wDeviceID,MCI_CLOSE,NULL,NULL);
}
m_wDeviceID=0;}
{
...
}后面
END_CATCH
加上看看.
{
CFileDialog filedlg(FALSE,NULL,NULL,OFN_OVERWRITEPROMPT,"(*.wav) ¦*.wav ¦");
filedlg.m_ofn.lpstrDefExt="wav";
if(m_bRecording)
{
if(filedlg.DoModal()==IDOK)
{
CString path;
path=filedlg.GetPathName();
MCI_SAVE_PARMS saveparms;
saveparms.lpfilename=(LPCSTR)path;
if(mciSendCommand(m_wDeviceID,MCI_SAVE,MCI_SAVE_FILE ¦MCI_WAIT,
(DWORD)(LPVOID)&saveparms))
return;
m_bRecording=FALSE;
} }
//在这里再加上一个右化括号}
不用,它的问题就是'OnStop' 函数前面那个函数少了一个花括号,导致编译器以为是在函数中定义函数了,所以判定为非法的函数定义。