打开串口成功,但是ReadFile确不成功,为什么

dzp2240   2009-8-24 13:07 楼主
我在WinCE下作GSM打电话程序,有CreateFile可以打开串口,但是在串口接收线程里用ReadFile读数据却不成功
但是CreateFiel打开串口确实成功了啊,用GetLastError得到的错误码是:〖6〗-句柄无效。为什么

下面是我的程序

BOOL fReadState = ReadFile(pCeSerial->m_hComm, recvBuf, 256, &dwLength, NULL);
                                   
if(!fReadState)
{
                                                               
AfxMessageBox(_T("无法从串口读取数据!"));
                               
}

回复评论 (12)

看看pCeSerial->m_hComm的值是否被非法改动过?
点赞  2009-8-24 13:20
波特率是否正确
点赞  2009-8-24 14:31
先用 WinCE 上的串口调试助手看看能否正常使用串口?
点赞  2009-8-24 14:36
m_hComm 的值是什么呢, 0xffffffff吗
注意设置下波特率
还有用GetLastError查看下CreateFile的返回值
点赞  2009-8-24 14:37
m_hComm是1122386670,不是空的啊,就是ReadFile不行
点赞  2009-8-24 16:51
检查驱动的读写接口,还有CreateFile的返回是否成功检测值是INVALID_HANDLE_VALUE而不是NULL哦,如果你认为CreateFile!=NULL就是成功,那你就错了,呵呵
点赞  2009-8-24 18:00
友情帮顶
点赞  2009-8-24 19:00
********************************************************************************************/
DWORD CProjectDlg::CommRecvTread(LPVOID lparam)
{
        DWORD dwLength;
        BYTE *recvBuf = new BYTE[16];
        CProjectDlg *pDlg = (CProjectDlg*)lparam;

        while(TRUE)
        {                                                                                                                                /* 等待线程退出事件 */
                if (WaitForSingleObject(pDlg->m_ExitThreadEvent, 0) == WAIT_OBJECT_0)
                        break;       

                if (pDlg->m_hComm != INVALID_HANDLE_VALUE)
                {                                                                                                                        /* 从串口读取数据 */
                        BOOL fReadState = ReadFile(pDlg->m_hComm, recvBuf, 16, &dwLength, NULL);
                        if(!fReadState)
                        {
                                //MessageBox(_T("无法从串口读取数据!"));
                        }
                        else
                        {
                                if(dwLength != 0)
                                {
                                        OnCommRecv(pDlg, recvBuf,pDlg->RecvCOMData, 16);                        /* 接收成功调用回调函数 */
                                        PurgeComm(pDlg->m_hComm,   PURGE_RXCLEAR   |   PURGE_TXCLEAR   );
                                        SetCommMask   (pDlg->m_hComm,   EV_RXCHAR   |   EV_CTS   |   EV_DSR   );
                                }
                        }
                }
        }               
    //  SetEvent(pDlg->m_ExitThreadEvent);/////对事件对象标识
        delete[] recvBuf;
        return 0;
}
我写的接收函数
参考一下
点赞  2009-8-24 22:23
我写的跟楼上的差不多一样啊,另外我也是用INVALID_HANDLE_VALUE判断CreateFile返回句柄是否为空,的确不是空的,但是就是ReadFile不成功,苦恼啊
点赞  2009-8-25 08:55
引用: 引用 3 楼 vbprofan 的回复:
先用 WinCE 上的串口调试助手看看能否正常使用串口?


我被无视了。。。
点赞  2009-8-25 09:44
WinCE 下的串调在这里下载:

http://www.cnblogs.com/we-hjb/archive/2008/12/14/1354871.html
点赞  2009-8-25 09:47
句柄检测是否正确,句柄无效条件:if(hCom == (HANDLE)-1)
点赞  2009-8-25 11:11
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复