19,504
社区成员
发帖
与我相关
我的任务
分享
CString str;
DWORD dwWrite = 0;//实际写入的字节量,作为返回值
int nTextLength;
if ((m_bPortOpened == FALSE) || (wParam & EV_RXCHAR) != EV_RXCHAR)
{
SetEvent(m_hPostMsgEvent);
return 0L;
}
//通知该函数处理数据,循环接收数据放到大数组中
DWORD dwLength = 0;
COMSTAT ComStat;
DWORD dwErrorFlags;
char* buf = new char[RECVSIZE];
ClearCommError(m_hComm, &dwErrorFlags, &ComStat);
dwLength = ComStat.cbInQue;
ReadFile(m_hComm, buf, dwLength, &dwLength, 0);
memcpy(&pRecvBuffer[pRecvNum], buf, dwLength);
pRecvNum += dwLength;//首地址移动写入数据的长度
nCount++;//写入一次+1,如果处理不同数据则根据具体情况选择判断依据
delete[] buf;
//数据接收完成存入数组中
if (nCount != 240)
{
SetEvent(m_hPostMsgEvent);
return 0L;
}
else
{
pRecvNum = 0;
nCount = 0;
}
CString strTemp;
strTemp.Format(_T("%s"), pRecvBuffer);
if (strTemp.Find(_T("VA")) != -1)
{
//创建文件,准备写入
}
//应该选择更合理的判断条件
for (int i = 0;i<240*40 ; i++)
{
switch (pRecvBuffer[i])
{
case 'W':
{
str += pRecvBuffer[i];
str += _T("\r\n");
DWORD strLength = str.GetLength()*sizeof(TCHAR);
WriteFile(hFile, str, strLength, &dwWrite, NULL);
//nTextLength = m_editReceive.GetWindowTextLength();
//m_editReceive.SetSel(nTextLength, nTextLength); //移动插入光标到正文末尾
//m_editReceive.SetSel(-1, 0);
//m_editReceive.ReplaceSel(str); // 向编辑视图中插入收到的字符
str.Empty();
break;
}
default:
str += pRecvBuffer[i];
}
}
ZeroMemory(pRecvBuffer, RECVSIZE);
AfxMessageBox(_T("yiqingkong"));
//使m_hPostMsgEvent成为有信号,即允许发送下一个WM_MY_MESSAGE消息
SetEvent(m_hPostMsgEvent);
return 0L;
if(nCount == 1)
{
char temp[100] = {0};
memcpy(temp,buf,40);//只执行第一次接收时将数据判断是否有VA
strTemp.Format(_T("%s"), buf);
}
可是这个find函数那一块还是不执行,试了好几种方法都不行,有没有其他的可以有效判断数据中字符串的函数,谢谢您ReadFile(m_hComm, buf, dwLength, &dwLength, 0);
for (int i = 0;i<40 ; i++)
{
str += buf[i];
}
delete[] buf;
DWORD strLength = str.GetLength()*sizeof(TCHAR);
WriteFile(hFile, str, strLength, &dwWrite, NULL);