colesafearray

黑龙江旅游网2580

其实前面已经问过了,不过不能问题补充,所以再发一次

colesafearray

答到的,其实加起来就是120+70分了,大家帮帮忙啊

在编一个串口通信程序,因为刚上手,所以是按着龚建伟书的第一章改写的。

在处理接收数据的函数中

void CSerTestDlg::OnComm()

{

VARIANT variant_inp;

COleSafeArray safearray_inp;

LONG len,k;

BYTE rxdata[2048];

CString strtemp;

if(m_ctrlComm.GetCommEvent()==2)

{

variant_inp=m_ctrlComm.GetInput();//第一步

safearray_inp=variant_inp;//第二步

len=safearray_inp.GetOneDimSize();//第三步

for(k=0;k<len;k++)

safearray_inp.GetElement(&k,rxdata+k);

for(k=0;k<len;k++)

{

char bt=*(char*)(rxdata+k);

strtemp.Format("%c",bt);

m_strEditRXData+=strtemp;

UpdateData(FALSE);

}

}

}

我用debug查看,第一步的结果是对的,数据放入到我定义的缓冲区variant_inp中

第二步弹出错误框,但忽略后safearray_inp也接收到数据

第三步又弹出错误框,但忽略后得到的有效数据长度len是一个负数。

结果后面就一直错下去了。

请教一下大家是不是safearray_inp=variant_inp;出了什么问题,怎么改?

ps:进一步调试后我发现似乎是COleSafeArray这个结构的问题

不单只是safearray_inp=variant_inp的问题

第二步改为 safearray_inp.Attach( variant_inp)还是要报错。忽略后,

我即使手动把len=safearray_inp.GetOneDimSize()

改为len=70

在下面的程序中safearray_inp.GetElement(&k,rxdata+k)还是要报错。

也就是说凡是涉及safearray_inp的都会出错。

我想请教一下为什么,望不吝赐教

ps:我试用了下面这种方法,但还是死在Safearray上

void CSerTestDlg::OnComm()

{

COleVariant varInput;

COleSafeArray safearray_inp;

LONG lLen= 0;

LONG i= 0;

BYTE rxdata[2048];//设置BYTE数组 An 8-bIT integerthat is not signed.

//注意:设置接收数据

if(2== m_ctrlComm.GetCommEvent())//事件值为2表示接收缓冲区内有字符

{

varInput.Attach(m_ctrlComm.GetInput());//读缓冲区

safearray_inp= varInput;//VARIANT型变量转换为ColeSafeArray型变量

lLen= safearray_inp.GetOneDimSize();//得到有效数据长度

for(i= 0; i< lLen; i++)

{

safearray_inp.GetElement(&i, rxdata+i);//转换为 BYTE型数组

}

m_strEditRXData+=(char*)rxdata;

UpdateData(FALSE);//更新编辑框内容

}

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!