用串口发送好几个字符,但只能收到一个,请各位帮忙看看

pursuit 2003-09-29 05:15:14
DWORD WINAPI ReadPortThread(LPVOID lpvoid)
{
BYTE Byte;
DWORD dwCommModemStatus,
dwBytesTransferred;
CString tempStr;

// Specify a set of events to be monitored for the port.
SetCommMask (hPort, EV_RXCHAR);

WaitCommEvent (hPort, &dwCommModemStatus, 0);
if (dwCommModemStatus & EV_RXCHAR)
{
do
{
tempStr=TEXT("");
// Read the data from the serial port.
ReadFile (hPort, &Byte, 1, &dwBytesTransferred, 0);

// Display the data read.
if (dwBytesTransferred == 1)
{
tempStr=(char)Byte;
strInStr+=tempStr;
}

}while (dwBytesTransferred == 0);
MessageBox(NULL,strInStr,TEXT("Result"),MB_OK);
}

// Retrieve modem control-register values.
GetCommModemStatus (hPort, &dwCommModemStatus);
}

则无论我发几个字符都只能收到第一个,要是改为:
DWORD WINAPI ReadPortThread(LPVOID lpvoid)
{
BYTE Byte;
DWORD dwCommModemStatus,
dwBytesTransferred;
CString tempStr;

// Specify a set of events to be monitored for the port.
SetCommMask (hPort, EV_RXCHAR);

WaitCommEvent (hPort, &dwCommModemStatus, 0);
if (dwCommModemStatus & EV_RXCHAR)
{
DWORD length=0;
COMSTAT ComStat;
DWORD dwErrorFlags;
char *buf=NULL;
ClearCommError(hPort,&dwErrorFlags,&ComStat);
length=ComStat.cbInQue;
ReadFile(hPort,buf,length,&length,NULL);

CString temp=buf;
MessageBox(NULL,temp,TEXT("Result"),MB_OK);
}

// Retrieve modem control-register values.
GetCommModemStatus (hPort, &dwCommModemStatus);
}
则消息框里为空。
各位帮帮忙,看看是什么问题啊。
...全文
296 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
AthlonxpX86 2003-09-29
  • 打赏
  • 举报
回复
把你的程序改为下面的看看

DWORD WINAPI ReadPortThread(LPVOID lpvoid)
{
BYTE Byte;
DWORD dwCommModemStatus,
dwBytesTransferred;
CString tempStr;
char *buf=new char[4096];//接收缓冲区不能为NULL,否则怎能接收数据?
TCHAR * temp=buf;
DWORD length=0;
COMSTAT ComStat;
DWORD dwErrorFlags;
// Specify a set of events to be monitored for the port.
SetCommMask (hPort, EV_RXCHAR);
for(;;)
{
WaitCommEvent (hPort, &dwCommModemStatus, 0);
if (dwCommModemStatus & EV_RXCHAR)
{
ClearCommError(hPort,&dwErrorFlags,&ComStat);
length=ComStat.cbInQue;
ReadFile(hPort,buf,length,&length,NULL);
*(temp+length)=0;
AfxMessageBox(temp);
}
}
// Retrieve modem control-register values.
GetCommModemStatus (hPort, &dwCommModemStatus);
}
yt老顽童 2003-09-29
  • 打赏
  • 举报
回复
第一个:
tempStr=(char)Byte;
应写成
tempStr.Format("%c",Byte);

第二个:
CString temp=buf;
应写为:
CString temp;
temp.Format("%s",buf);


不要想用 CString对象=char指针来拷贝字符串
一定要用Format


2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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