读写串口函数(多线程),为何总是得不到想要的从串口读来字符(请看下面程序),求助

「已注销」 2006-04-27 09:36:57
void __fastcall TCbwSerialPort::ReceiveChar(TCbwSerialPort* port, COMSTAT comstat)
{
bool bRead = true;
bool bResult = true;
DWORD dwError = 0;
DWORD BytesRead = 0;
unsigned char RXBuff;

for (;;)
{
EnterCriticalSection(&port->m_csCommunicationSync);

bResult = ClearCommError(port->m_hComm, &dwError, &comstat);
LeaveCriticalSection(&port->m_csCommunicationSync);

if (comstat.cbInQue == 0)
break;

EnterCriticalSection(&port->m_csCommunicationSync);

if (bRead)
{
bResult = ReadFile(port->m_hComm,
&RXBuff,
1,
&BytesRead,
&port->m_ov);
if (!bResult)
{
switch (dwError = GetLastError())
{
case ERROR_IO_PENDING:
bRead = false;
break;
default:
port->ProcessErrorMessage("ReadFile()");
break;
}
}
else
{
bRead = true;
}
}

if (!bRead)
{
bRead = true;
bResult = GetOverlappedResult(port->m_hComm,
&port->m_ov,
&BytesRead,
true);
if (!bResult)
{
port->ProcessErrorMessage("GetOverlappedResults(in ReadFile()");
}
}

LeaveCriticalSection(&port->m_csCommunicationSync);


::SendMessage((port->m_pOwner)->Handle, WM_COMM_RXCHAR, (WPARAM)RXBuff, (LPARAM) port->m_nPortNr);

}//for
v3b.ReadFromPort(RXBuff);//明明读过来的是0x4F,为何这里调用后的RXBuff数据不是0x4F
}
...全文
381 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gzlcd 2006-04-29
  • 打赏
  • 举报
回复
一般windows中通讯时用到的字符串是TCHAR,不是普通的char,换一下试试!
lc2236 2006-04-28
  • 打赏
  • 举报
回复
what is "v3b"? RXBuff or &RXBuff?

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧