if       (m_hComm       !=       INVALID_HANDLE_VALUE)   
{   
CloseHandle(m_hComm);   
m_hComm       =       INVALID_HANDLE_VALUE;   
}   

解决方案 »

  1.   

    正在进行数据操作的时候,CloseHandle(m_hComm);  有可能失败,这样串口会被占用
      

  2.   

    程序频繁初始化串口。
    //为什么?if(CloseHandle(hCom))
    //关闭串口时加判断,不成功可以再处理
      

  3.   

    程序频繁初始化串口因为板子上有一个USB转串口的芯片。上位机定时向板子发送检测数据,板子如果一段时间没有收到收据那说明串口出了问题。则会把USB转串口的芯片复位一次。上位机再次发数据前则要打开一次串口。所以要频繁的初始化串口。加了if(CloseHandle(hCom))依然不行。TO jameshooo  关闭串口时先中断所有操作是指什么?应为采用的是重叠I/O方式所以收发都是在后台进行怎么样能够关闭收发的后台程序呢?我是刚开始学习VC++的。问题很菜。见笑了
      

  4.   

    其实你可以这样试一下:
    将if (m_hComm != NULL)  
    {  
       CloseHandle(m_hComm);  
       m_hComm = NULL;  
    }  
    改为
    if (m_hComm != NULL)  
    {  
       CloseHandle(m_hComm);  
       sleep(10);
       m_hComm = NULL;  
    }  
    关闭串口和打开串口的间隔时间太短就会造成
    error 5:Access Denied,希望对你有所帮助!
      

  5.   

    FILE_FLAG_OVERLAPPED楼主用的异步模式?
    那你还能这样频繁的开关端口么,读写未完成,端口占用了,再次打开端口就会出现“ERROR_ACCESS_DENIED”入口被拒绝的错误。