CnComm使用问题

by0717 2010-09-25 01:08:43
在使用Cncomm时候
写入的时候:int i;
//DWORD dwPara = PURGE_TXABORT | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_RXCLEAR ;
char str[]="this is a test!";
i =sizeof(str);
Memo1->Lines->Add(AnsiString(str));
if(!Com_.IsOpen())
{
ShowLog("COM is not open!");
Com_.Open(ComboBox1->ItemIndex+1,L_Rate[ComboBox2->ItemIndex+1]);
}
else
//Com_.Purge(dwPara);
//Com_.ClearError();
Com_.Write(str,i);

}
写入的数据为:this is a test!




接受的时候:DWORD Rtime=10;
char buff[1024];
//Com_.ClearError();
Com_.Read(buff,1024,10);
ShowLog(buff);

显示内容除了显示:this is a test!后面还有X?


请问X?是怎么回事,谁知道啊,请教学习!
...全文
656 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
HELLO_CSDN 2011-05-01
  • 打赏
  • 举报
回复
我也遇到的这个情况 感谢前辈们!!!!
jiangshx 2010-09-29
  • 打赏
  • 举报
回复
没用过Cncomm
但我想应该它有判断接收缓存区有多少个字节数据的功能吧
比如api函数就可以判断:

DWORD dwError;
COMSTAT Stat;

if (::ClearCommError(_hCommHandle, &dwError, &Stat) && dwError > 0){
}
//执行上句之后,Stat.cbInQue为接收缓存区字节个数

然后根据缓存区个数读取。
nuozhai 2010-09-25
  • 打赏
  • 举报
回复
接收前 buf需要先置0 memset(buf,0,1024);
by0717 2010-09-25
  • 打赏
  • 举报
回复
呵呵,我明白妖哥的意思。
是我表达不清,并不是我需要到底要读取多少字符数,
而是我要把所有com口的内容全部读取到buff中,但不一定是1024个字符。
Read(buff,Dwlength,dtime);这个函数定义有问题,限制了一定要读取多少字符的。
ccrun.com 2010-09-25
  • 打赏
  • 举报
回复
如果没有办法确定到底读回了多少个字节,可以在定义缓冲的后面清空一下缓冲区:
char buff[1024] = { 0 };
memset(buff, 0x0, 1024);
by0717 2010-09-25
  • 打赏
  • 举报
回复
谢谢两位!
目前在用到CnComm的read的函数时候Com_.Read(buff,1024,10);
第二个参数由于是读取1024个字符到buff,但是由于COM接受不一定是多少个字符
我是控制一个pCB板子,在下command后不知道能有多少字符,若都显示有没有好办法!
ccrun.com 2010-09-25
  • 打赏
  • 举报
回复
是的,需要终止符。
确定一下Read函数读回来多少个字节,比如读回N个字节,然后再加一句:
buff[N] = 0x0;
就行了。
lghndyz 2010-09-25
  • 打赏
  • 举报
回复
要设终止符,X是乱码!!

1,317

社区成员

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

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