主题:初用API,就出现这些错误码???????
原程序如下:
这是有关想要声卡来简单录一小段语言的程序,虽然有不少错误,但好像都是由HWAVEIN m_hWaveIn,WAVEHDR m_pWaveHdr,int res,int resPrepare这些定义语句引起的,但这样只是定义而已,怎么会用法错误呢?????[em10][em10],请各位指点,谢谢!!!!!
#include<windows.h>
#include<mmsystem.h>
#include<stdio.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
/*定义内存缓存大小*/
unsigned long datasize=4800;
/*定义波形音频格式*/
WAVEFORMATEX waveformat;
waveformat.wFormatTag=WAVE_FORMAT_PCM;
waveformat.nChannels=1;
waveformat.nSamplesPerSec=8000;
waveformat.nAvgBytesPerSec=16000;
waveformat.nBlockAlign=2;
waveformat.wBitsPerSample=16;
waveformat.cbSize=0;
printf("WAVEFORMATEX size=%d\n",sizeof(WAVEFORMATEX));
HWAVEIN m_hWaveIn;
if(waveInGetNumDevs())
fprintf(stderr,"有可以使用的WaveIn通道\n");
else
{
fprintf(stderr,"没有可以使用的WaveIn通道\n");
exit(1);
}
/*打开音频设备*/
int res=waveInOpen(&m_hWaveIn,WAVE_MAPPER,&waveformat,(DWORD)NULL,0l,CALLBACK_WINDOW);
if(res==MMSYSERR_NOERROR)
fprintf(stderr,"打开waveIn成功\n");
else
{
fprintf(stderr,"打开waveIn通道失败\n");
exit(2);
}
WAVEHDR m_pWaveHdr;
m_pWaveHdr.lpData=(char *)GlobalLock(GlobalAlloc(GMEM_MOVEABLE|GMEM_SHARE,datasize));
memset(m_pWaveHdr.lpData,0,datasize);
m_pWaveHdr.dwBufferLength=datasize;
m_pWaveHdr.dwBytesRecorded=0;
m_pWaveHdr.dwUser=0;
m_pWaveHdr.dwFlags=0;
m_pWaveHdr.dwLoops=0;
/*准备内存录音*/
int resPrepare=waveInPrepareHeader(m_hWaveIn,&m_pWaveHdr,sizeof(WAVEHDR));
if(resPrepare==MMSYSERR_NOERROR)
printf("准备录音用头文件成功\n");
else
{
printf("不能开辟录音头文件,Error_Code=ox%03X\n",resPrepare);
exit(3);
}
resPrepare=waveInAddBuffer(m_hWaveIn,&m_pWaveHdr,sizeof(WAVEHDR));
if(resPrepare==MMSYSERR_NOERROR)
printf("准备录音用内存成功\n");
else
{
printf("不能开辟录音用缓存Error_Code=%d\n",resPrepare);
exit(4);
}
/*开始录制声音*/
if(!(waveInStart(m_hWaveIn))
printf("开始录制声音\n");
else
{
printf("开始录制声音失败\n");
exit(5);
}
/*将程式序挂起180秒*/
sleep(180);
if(!waveInStope(m_hWaveIn))
printf("停止录音");
else
printf("停止录音失败");
/*生成文件*/
HANDLE FileHandle=CreateFile("myspeech.bit",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FKLE_ATTRIBUTE_NORMAL,NULL);
if(waveInUnprepareHeader(m_pWaveHdr,&m_pWaveHdr,sizeof(WAVEHDR)))
printf("Un_PrepareHeader 失败");
else
printf("Un_PrepareHeader 成功");
if(GlobalFree(GlobalHandle(n_pWaveHdr.lpData)))
printf("Global Free 失败");
else
printf("Global Free 成功");
/*关闭录音设备*/
if(res==MMSYSERR_NOERROR)
if(waveInClose(m_hWaveIn)==MMSYSERR_NOERROR)
printf("正常关闭录音设备");
else
printf("非正常关闭录音设备");
return 0;
}
错误提示如下:
G:\record.c(25) : error C2275: 'HWAVEIN' : illegal use of this type as an expression
f:\microsoft visual studio\vc98\include\mmsystem.h(530) : see declaration of 'HWAVEIN'
G:\record.c(25) : error C2146: syntax error : missing ';' before identifier 'm_hWaveIn'
G:\record.c(25) : error C2065: 'm_hWaveIn' : undeclared identifier
G:\record.c(36) : error C2143: syntax error : missing ';' before 'type'
G:\record.c(37) : error C2065: 'res' : undeclared identifier
G:\record.c(45) : error C2275: 'WAVEHDR' : illegal use of this type as an expression
f:\microsoft visual studio\vc98\include\mmsystem.h(569) : see declaration of 'WAVEHDR'
G:\record.c(45) : error C2146: syntax error : missing ';' before identifier 'm_pWaveHdr'
G:\record.c(45) : error C2065: 'm_pWaveHdr' : undeclared identifier
G:\record.c(58) : error C2143: syntax error : missing ';' before 'type'
G:\record.c(60) : error C2065: 'resPrepare' : undeclared identifier
G:\record.c(80) : error C2146: syntax error : missing ')' before identifier 'printf'
G:\record.c(96) : error C2275: 'HANDLE' : illegal use of this type as an expression
f:\microsoft visual studio\vc98\include\winnt.h(207) : see declaration of 'HANDLE'
G:\record.c(96) : error C2146: syntax error : missing ';' before identifier 'FileHandle'
G:\record.c(96) : error C2065: 'FileHandle' : undeclared identifier
G:\record.c(96) : error C2065: 'FKLE_ATTRIBUTE_NORMAL' : undeclared identifier
G:\record.c(103) : error C2065: 'n_pWaveHdr' : undeclared identifier
G:\record.c(103) : error C2198: 'GlobalHandle' : too few actual parameters
这是有关想要声卡来简单录一小段语言的程序,虽然有不少错误,但好像都是由HWAVEIN m_hWaveIn,WAVEHDR m_pWaveHdr,int res,int resPrepare这些定义语句引起的,但这样只是定义而已,怎么会用法错误呢?????[em10][em10],请各位指点,谢谢!!!!!
#include<windows.h>
#include<mmsystem.h>
#include<stdio.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
/*定义内存缓存大小*/
unsigned long datasize=4800;
/*定义波形音频格式*/
WAVEFORMATEX waveformat;
waveformat.wFormatTag=WAVE_FORMAT_PCM;
waveformat.nChannels=1;
waveformat.nSamplesPerSec=8000;
waveformat.nAvgBytesPerSec=16000;
waveformat.nBlockAlign=2;
waveformat.wBitsPerSample=16;
waveformat.cbSize=0;
printf("WAVEFORMATEX size=%d\n",sizeof(WAVEFORMATEX));
HWAVEIN m_hWaveIn;
if(waveInGetNumDevs())
fprintf(stderr,"有可以使用的WaveIn通道\n");
else
{
fprintf(stderr,"没有可以使用的WaveIn通道\n");
exit(1);
}
/*打开音频设备*/
int res=waveInOpen(&m_hWaveIn,WAVE_MAPPER,&waveformat,(DWORD)NULL,0l,CALLBACK_WINDOW);
if(res==MMSYSERR_NOERROR)
fprintf(stderr,"打开waveIn成功\n");
else
{
fprintf(stderr,"打开waveIn通道失败\n");
exit(2);
}
WAVEHDR m_pWaveHdr;
m_pWaveHdr.lpData=(char *)GlobalLock(GlobalAlloc(GMEM_MOVEABLE|GMEM_SHARE,datasize));
memset(m_pWaveHdr.lpData,0,datasize);
m_pWaveHdr.dwBufferLength=datasize;
m_pWaveHdr.dwBytesRecorded=0;
m_pWaveHdr.dwUser=0;
m_pWaveHdr.dwFlags=0;
m_pWaveHdr.dwLoops=0;
/*准备内存录音*/
int resPrepare=waveInPrepareHeader(m_hWaveIn,&m_pWaveHdr,sizeof(WAVEHDR));
if(resPrepare==MMSYSERR_NOERROR)
printf("准备录音用头文件成功\n");
else
{
printf("不能开辟录音头文件,Error_Code=ox%03X\n",resPrepare);
exit(3);
}
resPrepare=waveInAddBuffer(m_hWaveIn,&m_pWaveHdr,sizeof(WAVEHDR));
if(resPrepare==MMSYSERR_NOERROR)
printf("准备录音用内存成功\n");
else
{
printf("不能开辟录音用缓存Error_Code=%d\n",resPrepare);
exit(4);
}
/*开始录制声音*/
if(!(waveInStart(m_hWaveIn))
printf("开始录制声音\n");
else
{
printf("开始录制声音失败\n");
exit(5);
}
/*将程式序挂起180秒*/
sleep(180);
if(!waveInStope(m_hWaveIn))
printf("停止录音");
else
printf("停止录音失败");
/*生成文件*/
HANDLE FileHandle=CreateFile("myspeech.bit",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FKLE_ATTRIBUTE_NORMAL,NULL);
if(waveInUnprepareHeader(m_pWaveHdr,&m_pWaveHdr,sizeof(WAVEHDR)))
printf("Un_PrepareHeader 失败");
else
printf("Un_PrepareHeader 成功");
if(GlobalFree(GlobalHandle(n_pWaveHdr.lpData)))
printf("Global Free 失败");
else
printf("Global Free 成功");
/*关闭录音设备*/
if(res==MMSYSERR_NOERROR)
if(waveInClose(m_hWaveIn)==MMSYSERR_NOERROR)
printf("正常关闭录音设备");
else
printf("非正常关闭录音设备");
return 0;
}
错误提示如下:
G:\record.c(25) : error C2275: 'HWAVEIN' : illegal use of this type as an expression
f:\microsoft visual studio\vc98\include\mmsystem.h(530) : see declaration of 'HWAVEIN'
G:\record.c(25) : error C2146: syntax error : missing ';' before identifier 'm_hWaveIn'
G:\record.c(25) : error C2065: 'm_hWaveIn' : undeclared identifier
G:\record.c(36) : error C2143: syntax error : missing ';' before 'type'
G:\record.c(37) : error C2065: 'res' : undeclared identifier
G:\record.c(45) : error C2275: 'WAVEHDR' : illegal use of this type as an expression
f:\microsoft visual studio\vc98\include\mmsystem.h(569) : see declaration of 'WAVEHDR'
G:\record.c(45) : error C2146: syntax error : missing ';' before identifier 'm_pWaveHdr'
G:\record.c(45) : error C2065: 'm_pWaveHdr' : undeclared identifier
G:\record.c(58) : error C2143: syntax error : missing ';' before 'type'
G:\record.c(60) : error C2065: 'resPrepare' : undeclared identifier
G:\record.c(80) : error C2146: syntax error : missing ')' before identifier 'printf'
G:\record.c(96) : error C2275: 'HANDLE' : illegal use of this type as an expression
f:\microsoft visual studio\vc98\include\winnt.h(207) : see declaration of 'HANDLE'
G:\record.c(96) : error C2146: syntax error : missing ';' before identifier 'FileHandle'
G:\record.c(96) : error C2065: 'FileHandle' : undeclared identifier
G:\record.c(96) : error C2065: 'FKLE_ATTRIBUTE_NORMAL' : undeclared identifier
G:\record.c(103) : error C2065: 'n_pWaveHdr' : undeclared identifier
G:\record.c(103) : error C2198: 'GlobalHandle' : too few actual parameters