hCOM = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
DCB dCB;
!GetCommState(hCOM, &dCB);
dCB.BaudRate = 38400;
dCB.ByteSize = 8;
dCB.Parity = NOPARITY;
dCB.StopBits = ONESTOPBIT;
SetCommState(hCOM, &dCB);
...char strBuffer[1024];
ZeroMemory( strBuffer,sizeof(strBuffer) );
DWORD dwReadNum;
ReadFile(hCOM, strBuffer, 1024, &dwReadNum, NULL);读完以后strBuffer中实际内容和dwReadNum不符,WHY?
0, NULL, OPEN_EXISTING, 0, NULL);
DCB dCB;
!GetCommState(hCOM, &dCB);
dCB.BaudRate = 38400;
dCB.ByteSize = 8;
dCB.Parity = NOPARITY;
dCB.StopBits = ONESTOPBIT;
SetCommState(hCOM, &dCB);
...char strBuffer[1024];
ZeroMemory( strBuffer,sizeof(strBuffer) );
DWORD dwReadNum;
ReadFile(hCOM, strBuffer, 1024, &dwReadNum, NULL);读完以后strBuffer中实际内容和dwReadNum不符,WHY?
解决方案 »
- 自定义的按钮类不响应WM_LBUTTONUP,但可以响应WM_COMMAND消息
- 在ctabctrl 控件中创建子页面(一个对话框页面),显示为空白的问题
- 如何将一个unsigned char* pOutBuffer类型复制给 一个TCHAR strDecode[300]类型呀? 急急
- 我是新人,请教一下怎么才能卸载安装没完成的VC
- 请教DirectDraw的问题
- vc中用2进制方式打开文件, 并显示是怎么实现的?
- puyinghua进来拿分
- 读入一个文本文件中的数据(SOS)
- 关于编程框架方案的一个问题
- 以mfc为框架的opengl,为什么连背景都没有显示啊。
- shellcode是什么?
- debug编译好的程序没问题,RELEASE编译的出错,该是什么原因?
请看清楚我的问题,是读完以后strBuffer中实际内容和dwReadNum不符
memset(pBuff,0,1024);
UINT READ=0;
While(Read<theFIle.GetLength())
{UINT temp=0;
temp=theFile.Read(pBuff,1024);
.
.
.
Read+=temp;}一般一次读1024字节,
而TEMP返回的是实际读的字节数!
如果是这样判断应该有问题,因为你读出来的数据中,可能有0的。而strlen()是以0为结束的字符串长度
然后
ClearCommError(...,m_ovelap)//忘了
m_ovelap.InQue里面放的就是当前串口中用的字符串
第二,建议不要使用CFile类实现串口通讯,会出问题的。
memset(&&timeOver,0,sizeof(timeOver));
DWORD timeMultiplier,timeConstant;
timeOver.ReadTotalTimeoutMultiplier=timeMultiplier;
timeOver.ReadTotalTimeoutConstant=timeConstant;
SetCommTimeouts(hComport,&&timeOver);
……
ReadFile(hComport,inBuffer,nWantRead,&&nRealRead,NULL); COMMTIMEOUTS结构用于设置读写函数的等待时间。 在ReadFile函数中hComport为待读串口句柄;inBuffer为输入缓冲区大小;nWantRead为每次调用ReadFile时,函数试图读出的字节数;nRealRead为实际读出的字节数;最后一个参数值NULL代表ReadFile将采用同步文件读写的方式。 如果所规定的待读取数据的数目nWantRead较大且设定的超时时间也较长,而接收缓冲区中数据较少,则可能引起线程阻塞。解决这一问题的方法是检查COMSTAT结构的cbInQue成员,该成员的大小即为接收缓冲区中处于等待状态的数据的实际个数。如果令nWantRead的值等于COMSTAT.cbInQue,就能较好地防止线程阻塞。