VC 串口控件编程 解决内存不断增加的问题 串口控件编程,解决内存不断增加的问题
开发环境: VC6 Windows 2000
讲解: 很多人在使用 VC 串口控件编写程序的时候,经常会遇到当串口接受数据量比较大时, 从 Windows 2000 任务管理器里,可以看到
程序占用的内存会不断增大,只好转用 API 从新编 写,本文主要解决这个
问题. 一般编写串口控件接收数据时,是这样写的: //初始化设置 m_msComm.SetCommPort(1)//打开 COM1 m_msComm.SetPortOpen(true);//打开串口 m_msComm.SetSettings("115200,n,8,1");//串口参数设置 m_msComm.SetInputMode(1);//comInputModeBinary 设置 Binary 缓冲区输入方式 m_msComm.SetRThreshold(5);//每接收 5 个字符则激发 OnComm()事件 m_msComm.SetInputLen(5);//每次读取 5 个字符 //接收数据 void CCOMDlg::OnComm() { VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[5]; //设置 BYTE 数组 CString strtemp; switch(m_msComm.GetCommEvent()) { case 2://事件值为 2 表示接收缓冲区内有字符
variant_inp=m_msComm.GetInput(); //读缓冲区--------------------------------*
safearray_inp = variant_inp; //VARIANT 型变量转换为 ColeSafeArray 型变量
len=safearray_inp.GetOneDimSize(); //验证得到有效数据长度 assert(len == 5);
for(k=0;k
>8) &; 0xff; strBuf[1] = tempbyte; //地址低位 tempbyte = para1 &; 0xff; strBuf[2] = tempbyte; //数据高位 tempbyte = (para2>>8) &; 0xff; strBuf[3] = tempbyte; //数据低位 tempbyte = para2 &; 0xff; strBuf[4] = tempbyte; OutBuf.SetSize(5); for(int i=0;i<5;i++) OutBuf[i] = strBuf[i]; varOutput = OutBuf; m_msComm.SetOutput(varOutput);
} 问题出在 VARIANT 型变量上,当执行到*号的这一行时,VARIANT 型变量就会使内存增加, 可以用下面的方法解决: void CCOMDlg::OnComm() { long len,k; COleVariant myVar; COleSafeArray safearray_inp; BYTE rxdata[5]; //设置 BYTE 数组 switch(m_msComm.GetCommEvent()) { case 2://事件值为 2 表示接收缓冲区内有字符 myVar.Attach (m_msComm.GetInput());--------------------------------------* safearray_inp = myVar; //COleVariant 型变量转换为 ColeSafeArray 型变量 len=safearray_inp.GetOneDimSize(); //验证得到有效数据长度 assert(len == 5); for(k=0;k