使用ReadFile读取串口数据报错!

使用ReadFile读取串口数据出错!!!!!!!!!!!!!!!!!!!!
大致流程是这样的 
1.以异步通信的方式打开一个串口
2.初始化设置
3.设置一个定时器在定时器里面反复读取缓冲区数据

代码编译没有问题,但是ReadFile一直提示失败,GetLastError提示997   重叠 I/O 操作在进行中。在效果上确实是异步I/O,但是读不数是为啥?

	
//打开串口设备正常==============================
hPort = CreateFile (TEXT(strCOM), 
GENERIC_READ | GENERIC_WRITE,                                    
0,            
NULL,         
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,    //FILE_FLAG_OVERLAPPED        
NULL);
ZeroMemory(&overlapped,sizeof(overlapped));//overlapped是OVERLAPPED结构体
hevent=CreateEvent(NULL,TRUE,TRUE,NULL); //HANDLE hevent
overlapped.hEvent=hevent;
//设置波特率超时等===========================
GetCommState(hPort,&Dcb);                                    
Dcb.BaudRate =CBR_19200;
Dcb.ByteSize =8;
Dcb.Parity =NOPARITY;
Dcb.StopBits =ONESTOPBIT;
SetCommState(hPort,&Dcb);
GetCommTimeouts(hPort,&CommTimeouts);
        ........................
SetCommTimeouts(hPort,&CommTimeouts);
//设置计时器在定时器里面读取数据=====================================
SetTimer(1,1000,NULL);
//读取数据==============该部分代码在计时器中===========
if(ReadFile(hPort,comBuf,400,&readedlen,&overlapped){
  .............................. 
 else{
     int  error==GetLastError();//error一直得到997   重叠 I/O 操作在进行中。
  }

------解决方案--------------------
ReadFile作为一个异步操作,直接返回结果,所以当你在取400字节数据操作返回的时候是ERROR_IO_PENDING(997)的状态,说明数据还在传输中,这是正常情况。下面我们要做的就是等待它传输完成。

if(ReadFile(hPort,comBuf,400,&readedlen,&overlapped){
.............................. 
else{
if(GetLastError()==ERROR_IO_PENDING)
{
bool bResult = GetOverlappedResult(hPort,&overlapped,&readedlen,TRUE); 
if(!bResult)
AfxMessageBox("error");
}
else
AfxMessageBox("error");
}