vc串口问题,请大家多多帮忙,我把所有的分都给了....急 楼主,你好!你说的功能很容易实现,先看看下边的文章:VC知识库文章 - 使用Win32创建串口通讯程序http://vckbase.com/document/viewdoc/?id=1114 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对于串口读写数据,缓冲区完全可以用char readbuf[xxx];char writebuf[xxx];HANDLE hCom;hCom = CreateFile("COM1:",GENERIC_READ | GENERIC_WRITE...,OPEN_EXSITING,...);ReadFile(hCom,readbuf,xxx,....);WriteFile(hCom,writebuf,xxx,...);CloseHandle(hCom); VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; CString strtemp1; if(m_ctrlComm.GetCommEvent()==2) { short n; n = m_ctrlComm.GetInBufferCount(); if(n >8 ) { variant_inp=m_ctrlComm.GetInput(); safearray_inp=variant_inp; len=safearray_inp.GetOneDimSize(); for(k=0;k<len;k++) { safearray_inp.GetElement(&k,rxdata+k); } for(k=0;k<len;k++) { BYTE bt=*(char*)(rxdata+k); strtemp1.Format("%02X ",bt); strtemp2 += strtemp1; } } }可能是我没有说得太明白,主要问题就是我接收到串口返回的数据会分为两次或者更多次的返回到时缓冲区.我加了语句 short n; n = m_ctrlComm.GetInBufferCount(); if(n >8 )来判断时,还是有问题,可以得到最终想要的数据,但会多一次空值,并且会有一个BUG,这个BUG是不定时的,有时会出现,但是我调试时却又不会运行到这个BUG上面去. 不支持用定时器去读写串口,最好用事件方式,最简单的用MSCOM去完成,因为串口属于一个慢速通信方式,中间有各种因素的影响,造成延迟或丢数等,用定时器去读,不仅浪费资源,而且效率很低!你回读分析方法和你在写出时的定义很相似,举例如下:如果你向串口写一个命令:###START RUN$$$###为起始头,$$$为结束标志下位机返回命令如下:###OK$$$表示成功 ###Error$$$表示成功出错 listcontrol 数据量大 如何调用音量控制程序 如何用代码新建一个文件? InstallShield中的问题~~~~ mciSendString循环播放出错 请问如何取得文件的信息?如:文件的修改日期? ++++VChelp,关于CListCtrl+++++ /********** 怎样改变一个已存在的工程的名字??? ****************/ MFC中CHotKey 请问如何捕获com中的事件? MFC 在类A中声明的为什么不能在类B之中调用 获取当前网页的句柄
HANDLE hCom;
hCom = CreateFile("COM1:",GENERIC_READ | GENERIC_WRITE...,OPEN_EXSITING,...);
ReadFile(hCom,readbuf,xxx,....);
WriteFile(hCom,writebuf,xxx,...);
CloseHandle(hCom);
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strtemp1;
if(m_ctrlComm.GetCommEvent()==2)
{
short n;
n = m_ctrlComm.GetInBufferCount();
if(n >8 )
{ variant_inp=m_ctrlComm.GetInput();
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp1.Format("%02X ",bt);
strtemp2 += strtemp1;
}
}
}
可能是我没有说得太明白,主要问题就是我接收到串口返回的数据会分为两次或者更多次的返回到时缓冲区.
我加了语句 short n;
n = m_ctrlComm.GetInBufferCount();
if(n >8 )
来判断时,还是有问题,可以得到最终想要的数据,但会多一次空值,并且会有一个BUG,这个BUG是不定时的,
有时会出现,但是我调试时却又不会运行到这个BUG上面去.
如果你向串口写一个命令:###START RUN$$$
###为起始头,$$$为结束标志
下位机返回命令如下:###OK$$$表示成功
###Error$$$表示成功出错