safearray_inp=variant_inp 出错

来源:百度知道 编辑:UC知道 时间:2024/06/06 17:33:37
按照例程写的串口通讯程序,但是程序运行到这里就出错。网上找了半天也没找到结果,请大虾帮帮忙。

VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strtemp;
if(m_ctrlComm.GetCommEvent() == 2) //事件值为2表示接收缓冲区内有字符
{
variant_inp = m_ctrlComm.GetInput(); //读缓冲区
safearray_inp = variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len = safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k); //转换为byte型数组
}
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt = *(char*)(rxdata + k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strEditRXData += strtemp; //加入接收编辑框对应字符串
}
UpdateData(false); //更新编辑框内容
}
初学者,请详细说明。谢谢

safearray_inp.GetElement(&k,rxdata+k);
错在这句,应该是safearray_inp.GetElement(k,rxdata+k);
你参考一下MSDN就知道了
COleSafeArray::GetElement()的说明
Retrieves a single element of the safe array.
void GetElement(
long* rgIndices,
void* pvData
);

Parameters
rgIndices
Pointer to an array of indexes for each dimension of the array.
pvData
Pointer to the location to place the element of the array.

我正在也用MSCOMM控件做了串口通信的程序。不过我用的是COleSafeArray::AccessData()先获得数组数据指针,然后再逐一读出来的。

加断点调试,看看指针等是否有效。

指针啊

估计是在初始化串口的时候出现错误!
试试这个(我试了没问题)
if(m_OnComm.GetPortOpen())
m_OnComm.SetPortOpen(FALSE);
m_OnComm.SetCommPort(1); //选择com1
if( !m_OnComm.GetPortOpen())
m_OnComm.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
m_OnComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位

--------------------------------------------