请教各位高手,能不能给指出是哪的问题啊?自发自收的话就不会关闭,两台电脑连得时候,接收一定数据后就会自动关闭,应该怎么改啊?
解决方案 »
- DirectShow的问题
- 请教:ORACLE数据库日期字段导致数据读不出来
- windows mobile 开发的前景怎么样啊?
- 关于AfxFindResourceHandle函数
- CMonthCalCtrl类 日历控件类怎样才能让某些日期黑体显示
- 请教关于CCheckListBox的生成问题
- 怎么一定义CStdioFile成员变量就出现非法操作?
- 关于VOD系统设计思想,不知道没关系 帮UP就给分
- 请问用鼠标取词的原理截获程序其他的api调用,如果该程序加过壳了,那么这个方法还可行吗?
- vc图像处理傅里叶反变换,在经过理想低通滤波器处理后,得到的图像有问题?
- PostMessage
- 菜鸟弱弱的问一下
void CALLBACK CMy110Dlg::OnCommRecv(CWnd* pWnd, char *buf, int buflen)
{
unsigned char addr[7];
unsigned char bianhao[7];
//CString str="";
CString tmp="";
CString str="";
CString data="";
//char *p;
unsigned char state; //装载开关的状态,与电压和电流值不放在一起
char buffer[8];
float *q;
int k=0;
int add;
int i;
int pro;
unsigned char number[132];
//long number;
float value[6];
int S;
int E;
int e=1;
float M;
long temp[7];
long temp2;
float temp1[7]; char hadd[6];
CMy110Dlg * pDlg = (CMy110Dlg*)pWnd;
int j=0;
pDlg->m_strRecDisp="";/****************************************************************************/
/* */
/* */
/* */
/****************************************************************************/
for( i=0;i<buflen;i++,buf++)
{
number[i]=*buf;
}
for(i=0;i<39;i++)
{
if(number[i]>0x80) //地址的起始位为1,数据的起始位为0
{
addr[j]=number[i]&0x7F; //代表地址,表示后面的数据是哪个项目的
bianhao[j]=i; //代表受到的数据中是地址的数据组的编号,从第零个接收数据开始计算的
j=j+1; //代表一共有j个是表示地址的数据
}
}
for(i=0;i<j;i++)
{
if(addr[i]!=7)
{
temp[i]=(((int)(number[bianhao[i]+1]<<1))<<8)|(((int)number[bianhao[i]+2])<<2);
temp[i]=(temp[i]<<8)|(((int)number[bianhao[i]+3])<<3);
temp[i]=(temp[i]<<8)|(((int)number[bianhao[i]+4])<<4);
temp[i]=temp[i]|number[bianhao[i]+5]; //转换成32位long型数据,都存在temp数组中,最后的那组数据只有四个有效位,放在最低四位
}
else
state=((number[bianhao[i]+1]<<1)|number[bianhao[i]+2]);//开关状态是分两组传输的,其中第二组只有一个有效值,将其放在最低位
}
//_itoa(state,buffer,10); //char *p=new char[8];
//unsigned char a=buffer[0];
unsigned char b;
//char *p;
// p=&a;
//AfxMessageBox(_T("到了!"));
// buf=buf-2;
//pDlg->m_strRecDispb.empty();
for(i=0;i<8;i++)
{
//tmp.Format(_T("%c"), *p);
b=state&0x80;
if(b)
{
pDlg->m_strRecDisp+= "1";
}
else
pDlg->m_strRecDisp+= "0";
state=state<<1;
//tmp.Empty();
// AfxMessageBox(_T("到了!"));
}
pDlg->SetDlgItemText(IDC_REC_DISP,pDlg->m_strRecDisp); // 显示在窗口上
for(i=0;i<6;i++)
{
S=(temp[i]&0x80000000)>>31;
E=((temp[i]&0x7F800000)>>23)-150;
M=(temp[i]&0x7fffff)|0x800000; //float型数据的尾数部分的二进制值,加了省略的1;
//temp2=1+temp2*0.00000011920928955078125;
if(E>=0)
{
for(int i=0;i<E;i++)
{
M=M*2;
}
}
else
{
for(int i=E;i<0;i++)
{
M=M/2;
}
}
if(S==0)
{
value[i]=M*e;
}
else
{
value[i]=-M*e;
}
}
q=value;
for(i=0;i<6;i++,q++)
{
str.Format(_T("%f"),*q);
pDlg->SetDlgItemText(IDC_EDIT1+addr[i]-1,str);
str.Empty();
}
pDlg->GetDlgItemText(IDC_REC_DISP,data); unsigned char *recvbuf = new unsigned char[8];
/* for( i =0 ; i < 8;i++)
{
recvbuf[i] = (char)data.GetAt(i);
if(recvbuf[i] == '1')
{
pDlg->CheckDlgButton(IDC_CHECK1+i, BST_CHECKED);
}
else
{
pDlg->CheckDlgButton(IDC_CHECK1+i, BST_UNCHECKED);
}
}*/ for( i =0 ; i < 7;i++)
{
recvbuf[i] = (char)data.GetAt(i);
if(recvbuf[i] == '1')
{
pDlg->CheckDlgButton(IDC_CHECK1+i, BST_CHECKED);
}
else
{
pDlg->CheckDlgButton(IDC_CHECK1+i, BST_UNCHECKED);
}
} recvbuf[7]=(char)data.GetAt(7);
if(recvbuf[i] == '1')
{
pDlg->CheckDlgButton(IDC_CHECK8, BST_CHECKED);
}
else
{
pDlg->CheckDlgButton(IDC_CHECK8, BST_UNCHECKED);
}
delete[] recvbuf;
data.Empty();
}
名称 this
值 CXX0017:Error: symbol "this" not found