一般编写串口控件接收数据时,是这样写的:
//初始化设置
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型变量
问题出在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