我在WinCE下作GSM打电话程序,有CreateFile可以打开串口,但是在串口接收线程里用ReadFile读数据却不成功
但是CreateFiel打开串口确实成功了啊,用GetLastError得到的错误码是:〖6〗-句柄无效。为什么
下面是我的程序
BOOL fReadState = ReadFile(pCeSerial->m_hComm, recvBuf, 256, &dwLength, NULL);
if(!fReadState)
{
AfxMessageBox(_T("无法从串口读取数据!"));
}
看看pCeSerial->m_hComm的值是否被非法改动过?
先用 WinCE 上的串口调试助手看看能否正常使用串口?
m_hComm 的值是什么呢, 0xffffffff吗
注意设置下波特率
还有用GetLastError查看下CreateFile的返回值
m_hComm是1122386670,不是空的啊,就是ReadFile不行
检查驱动的读写接口,还有CreateFile的返回是否成功检测值是INVALID_HANDLE_VALUE而不是NULL哦,如果你认为CreateFile!=NULL就是成功,那你就错了,呵呵
********************************************************************************************/
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;
}
我写的接收函数
参考一下
我写的跟楼上的差不多一样啊,另外我也是用INVALID_HANDLE_VALUE判断CreateFile返回句柄是否为空,的确不是空的,但是就是ReadFile不成功,苦恼啊
WinCE 下的串调在
这里下载:
http://www.cnblogs.com/we-hjb/archive/2008/12/14/1354871.html
句柄检测是否正确,句柄无效条件:if(hCom == (HANDLE)-1)